new: usb控制器检测

This commit is contained in:
fslongjin
2022-07-17 17:24:27 +08:00
parent a1c843cd3a
commit afb80d4d6e
8 changed files with 67 additions and 7 deletions

View File

@ -1,8 +1,9 @@
CFLAGS += -I .
all: usb.o xhci.o
usb.o: usb,c
usb.o: usb.c
gcc $(CFLAGS) -c usb.c -o usb.o
xhci.o: xhci.c
xhci.o: xhci/xhci.c
gcc $(CFLAGS) -c xhci/xhci.c -o xhci/xhci.o

View File

@ -1,11 +1,14 @@
#include "usb.h"
#include "xhci/xhci.h"
#include <common/kprint.h>
#include <driver/pci/pci.h>
#include <debug/bug.h>
#define MAX_USB_NUM 8 // pci总线上的usb设备的最大数量
// 在pci总线上寻找到的usb设备控制器的header
struct pci_device_structure_header_t *usb_pdevs[MAX_USB_NUM];
static int usb_pdevs_count = 0;
/**
* @brief 初始化usb驱动程序
@ -14,4 +17,38 @@ struct pci_device_structure_header_t *usb_pdevs[MAX_USB_NUM];
void usb_init()
{
kinfo("Initializing usb driver...");
// 获取所有usb-pci设备的列表
pci_get_device_structure(USB_CLASS, USB_SUBCLASS, usb_pdevs, &usb_pdevs_count);
if (WARN_ON(usb_pdevs_count == 0))
{
kwarn("There is no usb hardware in this computer!");
return;
}
// 初始化每个usb控制器
for (int i = 0; i < usb_pdevs_count; ++i)
{
switch (usb_pdevs[i]->ProgIF)
{
case USB_TYPE_UHCI:
case USB_TYPE_OHCI:
case USB_TYPE_EHCI:
case USB_TYPE_UNSPEC:
case USB_TYPE_DEVICE:
kwarn("Unsupported usb host type: %#02x", usb_pdevs[i]->ProgIF);
break;
case USB_TYPE_XHCI:
// 初始化对应的xhci控制器
xhci_init(usb_pdevs[i]);
break;
default:
kerror("Error value of usb_pdevs[%d]->ProgIF: %#02x", i, usb_pdevs[i]->ProgIF);
return;
break;
}
}
kinfo("Successfully initialized all usb host controllers!");
}

View File

@ -1 +1,11 @@
#include "xhci.h"
#include "xhci.h"
/**
* @brief 初始化xhci控制器
*
* @param header 指定控制器的pci device头部
*/
void xhci_init(struct pci_device_structure_header_t *header)
{
}

View File

@ -1 +1,9 @@
#pragma once
#pragma once
#include <driver/usb/usb.h>
/**
* @brief 初始化xhci控制器
*
* @param header 指定控制器的pci device头部
*/
void xhci_init(struct pci_device_structure_header_t *header);