Lectura Pci

Propuesta de lectura para campo pci

orpahn:

#include <hwbus_param.h>
#include <linux/pci.h>

#include <sysfs_driver.h>

ssize_t hwbus_pci_config_read(struct file *filp, char __user *buf,
                              size_t count, loff_t *f_pos)
{
struct pci_dev *pdev = hwbus_get_pci_dev_from_param();
u8 data[4];
u16 vendor, device;
size_t bytes_to_copy;

if (!pdev)
   return -ENODEV;

if (*f_pos >= 4)
   return 0;

pci_read_config_word(pdev, PCI_VENDOR_ID, &vendor);
pci_read_config_word(pdev, PCI_DEVICE_ID, &device);

data[0] = vendor & 0xFF;
data[1] = (vendor >> 8) & 0xFF;
data[2] = device & 0xFF;
data[3] = (device >> 8) & 0xFF;

bytes_to_copy = 4 - *f_pos;
if (bytes_to_copy > count)
   bytes_to_copy = count;

if (copy_to_user(buf, data + *f_pos, bytes_to_copy))
   return -EFAULT;

*f_pos += bytes_to_copy;
return bytes_to_copy;
}