Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4417 → Rev 4418

/branches/dd/uspace/srv/pci/psycho.c
109,12 → 109,12
return res;
}
 
static inline uint16_t invert_endianess_16(uint16_t x)
static inline uint16_t invert_endianness_16(uint16_t x)
{
return (x & 0xFF) << 8 | (x >> 8);
}
 
static inline uint32_t invert_endianess_32(uint32_t x)
static inline uint32_t invert_endianness_32(uint32_t x)
{
return ((x & 0xFF) << 24) | ((x & 0xFF00) << 8) | ((x & 0xFF0000) >> 8) | (x >> 24);
}
126,10 → 126,10
buf[0] = pio_read_8(psycho_conf_addr(d, reg));
break;
case 2:
*((uint16_t *)buf) = invert_endianess_16(pio_read_16(psycho_conf_addr(d, reg)));
*((uint16_t *)buf) = invert_endianness_16(pio_read_16(psycho_conf_addr(d, reg)));
break;
case 4:
*((uint32_t *)buf) = invert_endianess_32(pio_read_32(psycho_conf_addr(d, reg)));
*((uint32_t *)buf) = invert_endianness_32(pio_read_32(psycho_conf_addr(d, reg)));
break;
}
}
141,10 → 141,10
pio_write_8(psycho_conf_addr(d, reg), buf[0]);
break;
case 2:
pio_write_16(psycho_conf_addr(d, reg), invert_endianess_16(*((uint16_t *)buf)));
pio_write_16(psycho_conf_addr(d, reg), invert_endianness_16(*((uint16_t *)buf)));
break;
case 4:
pio_write_32(psycho_conf_addr(d, reg), invert_endianess_32(*((uint32_t *)buf)));
pio_write_32(psycho_conf_addr(d, reg), invert_endianness_32(*((uint32_t *)buf)));
break;
}
}
/branches/dd/uspace/srv/pci/pci.c
18,18 → 18,17
static void pci_lookup_devices(pci_drv_t *drv);
 
 
// TODO: think about locking
void pci_bus_scan(pci_bus_t *bus)
{
pci_dev_t *dev = pci_alloc_dev();
pci_bus_t *child_bus = NULL;
int dnum, fnum;
int dnum, fnum, bus_num;
bool multi;
uint8_t header_type;
printf("PCI: scanning bus number %d\n", bus->num);
for (dnum = 0; dnum < 4/*256*/; dnum++) {
for (dnum = 0; dnum < 256; dnum++) {
multi = true;
for (fnum = 0; multi && fnum < 8; fnum++) {
pci_init_dev(dev, bus, dnum, fnum);
45,17 → 44,18
header_type = header_type & 0x7F; // clear the multifunction bit
printf("PCI: adding new device %d : %d", dnum, fnum);
printf(" - vendor = %x, device = %x.\n", dev->vendor_id, dev->device_id);
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 ) {
if (dnum != 0 && fnum != 0) {
bus_num = pci_conf_read_8(dev, PCI_BRIDGE_SEC_BUS_NUM);
if(bus_num != bus->num) {
child_bus = pci_alloc_bus();
pci_init_bus(child_bus, bus, pci_conf_read_8(dev, PCI_BRIDGE_SEC_BUS_NUM));
pci_init_bus(child_bus, bus, bus_num);
pci_bus_register(child_bus);
pci_bus_scan(child_bus);
}
}
}
}
}