pci_device
typedef struct pci_device pci_device;
uint8 (*read_io_8)(pci_device *device, addr_t mappedIOAddress);
void (*write_io_8)(pci_device *device, addr_t mappedIOAddress,
uint16 (*read_io_16)(pci_device *device, addr_t mappedIOAddress);
void (*write_io_16)(pci_device *device, addr_t mappedIOAddress,
uint32 (*read_io_32)(pci_device *device, addr_t mappedIOAddress);
void (*write_io_32)(pci_device *device, addr_t mappedIOAddress,
phys_addr_t (*ram_address)(pci_device *device, phys_addr_t physicalAddress);
uint32 (*read_pci_config)(pci_device *device, uint16 offset,
void (*write_pci_config)(pci_device *device, uint16 offset,
status_t (*find_pci_capability)(pci_device *device, uint8 capID,
void (*get_pci_info)(pci_device *device, struct pci_info *info);
status_t (*find_pci_extended_capability)(pci_device *device, uint16 capID,
uint8 (*get_powerstate)(pci_device *device);
void (*set_powerstate)(pci_device *device, uint8 state);
uint32 (*get_msi_count)(pci_device *device);
status_t (*configure_msi)(pci_device *device,
status_t (*unconfigure_msi)(pci_device *device);
status_t (*enable_msi)(pci_device *device);
status_t (*disable_msi)(pci_device *device);
uint32 (*get_msix_count)(pci_device *device);
status_t (*configure_msix)(pci_device *device,
status_t (*enable_msix)(pci_device *device);
pci_device *device;
status_t (*detect_channel)(pci_device_module_info *pci, pci_device *pciDevice,
status_t (*detect_controller)(pci_device_module_info *pci, pci_device *pciDevice,
pci_device *device;
.read_io_32 = [](pci_device *device, addr_t mappedIOAddress) {
.write_io_32 = [](pci_device *device, addr_t mappedIOAddress, uint32 value) {
.ram_address = [](pci_device *device, phys_addr_t physicalAddress) {
.read_pci_config = [](pci_device *device, uint16 offset, uint8 size) {
.write_pci_config = [](pci_device *device, uint16 offset, uint8 size, uint32 value) {
.find_pci_capability = [](pci_device *device, uint8 capID, uint8 *offset) {
.get_pci_info = [](pci_device *device, struct pci_info *info) {
.find_pci_extended_capability = [](pci_device *device, uint16 capID, uint16 *offset) {
.get_powerstate = [](pci_device *device) {
.set_powerstate = [](pci_device *device, uint8 state) {
.get_msi_count = [](pci_device *device) {
.configure_msi = [](pci_device *device, uint32 count, uint32 *startVector) {
.unconfigure_msi = [](pci_device *device) {
.enable_msi = [](pci_device *device) {
.disable_msi = [](pci_device *device) {
.get_msix_count = [](pci_device *device) {
.configure_msix = [](pci_device *device, uint32 count, uint32 *startVector) {
.enable_msix = [](pci_device *device) {
pci_device* device = (pci_device*)malloc(sizeof(*device));
pci_device* device = (pci_device*)cookie;
.read_io_8 = [](pci_device *device, addr_t mappedIOAddress) {
.write_io_8 = [](pci_device *device, addr_t mappedIOAddress, uint8 value) {
.read_io_16 = [](pci_device *device, addr_t mappedIOAddress) {
.write_io_16 = [](pci_device *device, addr_t mappedIOAddress, uint16 value) {
pci_device *pci_device;
sDeviceManager->get_driver(parent, (driver_module_info **)&pci, (void **)&pci_device);
pci->get_pci_info(pci_device,&info);
pci->write_pci_config(pci_device, 0x51, 1, (pci->read_pci_config(pci_device, 0x51, 1) & ~0x80));
pci->write_pci_config(pci_device, 0x51, 1, (pci->read_pci_config(pci_device, 0x51, 1) & ~0x03));
pci->write_pci_config(pci_device, 0x55, 1, (pci->read_pci_config(pci_device, 0x55, 1) & ~0x03));
pci->write_pci_config(pci_device, 0x5a, 1, (pci->read_pci_config(pci_device, 0x5a, 1) & ~0x10));
pci->write_pci_config(pci_device, 0x5b, 1, 0x22);
pci->write_pci_config(pci_device, 0x5b, 1,
(pci->read_pci_config(pci_device, 0x5b, 1) & 0x01) | 0x20);
pci_device *device = NULL;
detect_controller(pci_device_module_info *pci, pci_device *pci_device,
pci_device *device;
pci_device *device = channel->device;
pci_device *device;
pci_device *device;
pci_device *device;
pci_device *device = channel->device;
pci_device * device;
pci_device* device;
pci_device* device;
pci_device* device;
pci_device* device;
pci_device* device;
pci_device* device;
pci_device* device;
pci_device* device;
pci_device* device;
pci_device* device;
pci_device *device;
pci_device_module_info *pciModule, pci_device *device)
pci_device *pciDevice);
pci_device * fPCIDevice;
pci_device *pciDevice;
pci_device* device;
pci_device* device;
EHCI::EHCI(pci_info *info, pci_device_module_info* pci, pci_device* device, Stack *stack,
pci_device* device;
pci_device *pciDevice;
struct pci_device;
pci_device* fDevice;
pci_device* device, Stack *stack, device_node *node);
pci_device* device;
pci_device* device;
OHCI::OHCI(pci_info *info, pci_device_module_info* pci, pci_device* device, Stack *stack,
pci_device* device;
pci_device* fDevice;
struct pci_device;
pci_device* device, Stack *stack, device_node* node);
pci_device* device;
pci_device* device;
pci_device* device;
UHCI::UHCI(pci_info *info, pci_device_module_info* pci, pci_device* device, Stack *stack,
pci_device* fDevice;
struct pci_device;
pci_device* device, Stack *stack, device_node* node);
pci_device* device;
pci_device* device;
XHCI::XHCI(pci_info *info, pci_device_module_info* pci, pci_device* device, Stack *stack,
pci_device* device;
struct pci_device;
pci_device* fDevice;
XHCI(pci_info *info, pci_device_module_info* pci, pci_device* device, Stack *stack,
pci_device* device;
pci_device* device;
pci_device* device;
pci_device* device;
nvme_pcicfg_read32(struct pci_device* dev, uint32_t* value, uint32_t offset)
nvme_pcicfg_write32(struct pci_device* dev, uint32_t value, uint32_t offset)
struct pci_device* dev = (struct pci_device*)devhandle;
struct nvme_ctrlr *nvme_ctrlr_open(struct pci_device *pdev,
struct pci_device *pdev = ctrlr->pci_dev;
static struct pci_device *nvme_pci_ctrlr_probe(const char *slot_name)
struct pci_device *pci_dev = NULL;
extern struct nvme_ctrlr * nvme_ctrlr_open(struct pci_device *pdev,
nvme_ctrlr_attach(struct pci_device *pci_dev,
struct pci_device *pci_dev;
extern struct nvme_ctrlr *nvme_ctrlr_attach(struct pci_device *pci_dev,
extern unsigned int nvme_ctrlr_get_quirks(struct pci_device *pdev);
extern struct pci_device *
extern int nvme_pci_device_reset(struct pci_device *dev);
extern int nvme_pci_device_get_serial_number(struct pci_device *dev,
static inline int nvme_pci_dev_cmp(struct pci_device *pci_dev1,
struct pci_device *pci_dev2)
static inline void nvme_pci_get_pci_id(struct pci_device *pci_dev,
int nvme_pcicfg_read8(struct pci_device *dev, uint8_t *value, uint32_t offset);
int nvme_pcicfg_write8(struct pci_device *dev, uint8_t value, uint32_t offset);
int nvme_pcicfg_read16(struct pci_device *dev, uint16_t *value, uint32_t offset);
int nvme_pcicfg_write16(struct pci_device *dev, uint16_t value, uint32_t offset);
int nvme_pcicfg_read32(struct pci_device *dev, uint32_t *value, uint32_t offset);
int nvme_pcicfg_write32(struct pci_device *dev, uint32_t value, uint32_t offset);
static inline int nvme_pcicfg_read8(struct pci_device *dev,
static inline int nvme_pcicfg_write8(struct pci_device *dev,
static inline int nvme_pcicfg_read16(struct pci_device *dev,
static inline int nvme_pcicfg_write16(struct pci_device *dev,
static inline int nvme_pcicfg_read32(struct pci_device *dev,
static inline int nvme_pcicfg_write32(struct pci_device *dev,
struct pci_device *dev = devhandle;
struct pci_device *dev = devhandle;
struct pci_device *dev = devhandle;
struct pci_device *dev = devhandle;
unsigned int nvme_ctrlr_get_quirks(struct pci_device *pdev)
struct pci_device *pdev)
pci_device* pcidev;
pci_device* device = new pci_device;
pci_device* pci_cookie;
pci_device *pci_cookie;
pci_device *device = channel->device;
pci_device *device = channel->device;
pci_device *device = channel->device;
pci_device *device = channel->device;
pci_device *device = channel->device;
pci_device *device = channel->device;
pci_device *device = channel->device;
pci_device *device = channel->device;
ata_adapter_detect_channel(pci_device_module_info *pci, pci_device *pci_device,
api = pci->read_pci_config(pci_device, PCI_class_api, 1);
pcicmdOld = pcicmdNew = pci->read_pci_config(pci_device, PCI_command, 2);
pci_device *device = channel->device;
pci->write_pci_config(pci_device, PCI_command, 2, pcicmdNew);
uint8 status = pci->read_io_8(pci_device, bus_master_base
pciVendor = pci->read_pci_config(pci_device, PCI_vendor_id, 2);
pci_device *device;
ata_adapter_detect_controller(pci_device_module_info *pci, pci_device *pci_device,
pci_device *device;
pci_device *device = channel->device;
pci_device *device;
if (pci->update_interrupt_line(entry.pci_bus, entry.pci_device,
uint8 headerType = pci->read_pci_config(entry.pci_bus, entry.pci_device, 0,
entry.pci_bus, entry.pci_device);
uint16 vendorId = pci->read_pci_config(entry.pci_bus, entry.pci_device,
entry.pci_bus, entry.pci_device, function);
entry.pci_device, function, PCI_interrupt_pin, 1);
" != %" B_PRIu8 "\n", entry.pci_bus, entry.pci_device, function,
entry.pci_device, function, PCI_interrupt_line, 1);
irqEntry.pci_device = (uint8)(acpiTable->Address >> 16);
if (irqEntry.pci_bus != bus || irqEntry.pci_device != device)
newEntry.pci_device = device;
" config 0x%02x\n", entry.pci_bus, entry.pci_device, entry.pin + 1,
B_PRIx32 "\n", irqEntry.pci_bus, irqEntry.pci_device,
uint8 pci_device;