/branches/dd/uspace/srv/pci/intel_method1.c |
---|
File deleted |
/branches/dd/uspace/srv/pci/psycho.c |
---|
84,8 → 84,10 |
uint8_t pci_conf_read_8(pci_dev_t *dev, int reg) |
{ |
uint8_t res; |
uint8_t res; |
futex_down(&pci_conf_futex); |
psycho_conf_read(dev, reg, &res, sizeof(uint8_t)); |
futex_up(&pci_conf_futex); |
return res; |
} |
92,7 → 94,9 |
uint16_t pci_conf_read_16(pci_dev_t *dev, int reg) |
{ |
uint16_t res; |
futex_down(&pci_conf_futex); |
psycho_conf_read(dev, reg, (uint8_t *)(&res), sizeof(uint16_t)); |
futex_up(&pci_conf_futex); |
return res; |
} |
99,7 → 103,9 |
uint32_t pci_conf_read_32(pci_dev_t *dev, int reg) |
{ |
uint32_t res; |
psycho_conf_read(dev, reg, (uint8_t *)(&res), sizeof(uint32_t)); |
futex_down(&pci_conf_futex); |
psycho_conf_read(dev, reg, (uint8_t *)(&res), sizeof(uint32_t)); |
futex_up(&pci_conf_futex); |
return res; |
} |
115,7 → 121,6 |
static void psycho_conf_read(pci_dev_t *d, int reg, uint8_t *buf, int len) |
{ |
futex_down(&pci_conf_futex); |
switch (len) { |
case 1: |
buf[0] = pio_read_8(psycho_conf_addr(d, reg)); |
126,13 → 131,11 |
case 4: |
*((uint32_t *)buf) = invert_endianness_32(pio_read_32(psycho_conf_addr(d, reg))); |
break; |
} |
futex_up(&pci_conf_futex); |
} |
} |
static void psycho_conf_write(pci_dev_t *d, int reg, uint8_t *buf, int len) |
{ |
futex_down(&pci_conf_futex); |
switch (len) { |
case 1: |
pio_write_8(psycho_conf_addr(d, reg), buf[0]); |
144,7 → 147,6 |
pio_write_32(psycho_conf_addr(d, reg), invert_endianness_32(*((uint32_t *)buf))); |
break; |
} |
futex_up(&pci_conf_futex); |
} |
/* pci bus structure initialization */ |
/branches/dd/uspace/srv/pci/pci.c |
---|
26,18 → 26,16 |
bool multi; |
uint8_t header_type; |
for (dnum = 0; dnum < 32; dnum++) { |
printf("PCI: scanning bus number %d\n", bus->num); |
for (dnum = 0; dnum < 256; dnum++) { |
multi = true; |
for (fnum = 0; multi && fnum < 8; fnum++) { |
pci_init_dev(dev, bus, dnum, fnum); |
dev->vendor_id = pci_conf_read_16(dev, PCI_VENDOR_ID); |
dev->device_id = pci_conf_read_16(dev, PCI_DEVICE_ID); |
if (dev->vendor_id == 0xFFFF) { // device is not present, go on scanning the bus |
if (fnum == 0) { |
break; |
} else { |
continue; |
} |
if (dev->vendor_id == 0xFFFF) { |
continue; // device is not present, go on scanning the bus |
} |
header_type = pci_conf_read_8(dev, PCI_HEADER_TYPE); |
if (fnum == 0) { |
45,14 → 43,14 |
} |
header_type = header_type & 0x7F; // clear the multifunction bit |
printf("PCI: adding new device %d : %d : %d", dev->bus->num, dnum, fnum); |
printf(" - vendor = 0x%04X, device = 0x%04X.\n", dev->vendor_id, dev->device_id); |
pci_device_register(dev); |
printf("PCI: adding new device %d : %d", dnum, fnum); |
printf(" - vendor = 0x%x, device = 0x%x.\n", dev->vendor_id, dev->device_id); |
pci_device_register(dev); |
dev = pci_alloc_dev(); // alloc new aux. dev. structure |
if (header_type == PCI_HEADER_TYPE_BRIDGE || header_type == PCI_HEADER_TYPE_CARDBUS ) { |
bus_num = pci_conf_read_8(dev, PCI_BRIDGE_SEC_BUS_NUM); |
printf("PCI: device is pci-to-pci bridge, secondary bus number = %d.\n", bus_num); |
if(bus_num > bus->num) { |
if(bus_num != bus->num) { |
child_bus = pci_alloc_bus(); |
pci_init_bus(child_bus, bus, bus_num); |
pci_bus_register(child_bus); |
59,8 → 57,6 |
pci_bus_scan(child_bus); |
} |
} |
dev = pci_alloc_dev(); // alloc new aux. dev. structure |
} |
} |
/branches/dd/uspace/srv/pci/pci.h |
---|
4,7 → 4,6 |
//#include <arch/types.h> |
#include <libadt/list.h> |
#include <stdio.h> |
#include <stdlib.h> |
struct pci_drv; |
struct pci_dev; |
/branches/dd/uspace/srv/pci/pci_conf.h |
---|
7,4 → 7,4 |
uint16_t pci_conf_read_16(pci_dev_t *dev, int reg); |
uint32_t pci_conf_read_32(pci_dev_t *dev, int reg); |
#endif |
#endif |
/branches/dd/uspace/srv/pci/pci_bus.h |
---|
4,4 → 4,4 |
int pci_bus_init(); |
void pci_bus_clean(); |
#endif |
#endif |
/branches/dd/uspace/srv/pci/Makefile |
---|
50,10 → 50,6 |
SOURCES += psycho.c |
endif |
ifeq ($(UARCH), ia32) |
SOURCES += intel_method1.c |
endif |
CFLAGS += -D$(UARCH) |
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))) |