* the \c pci_device structure.
*/
intptr_t user_data;
+
+ /**
+ * Used by the VGA arbiter. Kind of resource decoded by the device and
+ * the file descriptor. */
+ int vgaarb_rsrc;
+ int vgaarb_fd;
};
* VGA Arbiter definitions, functions and related.
*/
-typedef int VgaArbRsrcType;
-
-/* This is a mask that can be OR'ed */
-#define VGA_ARB_RSRC_NONE 0
-#define VGA_ARB_RSRC_LEGACY_IO 1
-#define VGA_ARB_RSRC_LEGACY_MEM 2
-#define VGA_ARB_RSRC_NORMAL_IO 4
-#define VGA_ARB_RSRC_NORMAL_MEM 8
-
-typedef struct {
- int fd;
- VgaArbRsrcType rsrc;
-} vga_arb_rec, *vga_arb_ptr;
+/* Legacy VGA regions */
+#define VGA_ARB_RSRC_NONE 0x00
+#define VGA_ARB_RSRC_LEGACY_IO 0x01
+#define VGA_ARB_RSRC_LEGACY_MEM 0x02
+/* Non-legacy access */
+#define VGA_ARB_RSRC_NORMAL_IO 0x04
+#define VGA_ARB_RSRC_NORMAL_MEM 0x08
/*
* With exception of vga_arb_trylock(), all functions bellow return 1 on success
* it will print error messages at stderr.
*
*/
-int pci_device_vgaarb_init (vga_arb_ptr *vgaDev);
-void pci_device_vgaarb_fini (vga_arb_ptr vgaDev);
-int pci_device_vgaarb_set_target (vga_arb_ptr vgaDev, unsigned int domain,
- unsigned int bus, unsigned int dev, unsigned int fn);
-int pci_device_vgaarb_decodes (vga_arb_ptr vgaDev);
-int pci_device_vgaarb_lock (vga_arb_ptr vgaDev);
-int pci_device_vgaarb_trylock (vga_arb_ptr vgaDev);
-int pci_device_vgaarb_unlock (vga_arb_ptr vgaDev);
+int pci_device_vgaarb_init (struct pci_device *dev);
+void pci_device_vgaarb_fini (struct pci_device *dev);
+int pci_device_vgaarb_set_target (struct pci_device *dev);
+int pci_device_vgaarb_decodes (struct pci_device *dev);
+int pci_device_vgaarb_lock (struct pci_device *dev);
+int pci_device_vgaarb_trylock (struct pci_device *dev);
+int pci_device_vgaarb_unlock (struct pci_device *dev);
#endif /* PCIACCESS_H */
#define VGAARB_DEV "/dev/vga_arbiter"
int
-pci_device_vgaarb_init(vga_arb_ptr *vgaDev)
+pci_device_vgaarb_init(struct pci_device *dev)
{
- *vgaDev = malloc (sizeof(vga_arb_ptr *));
- if (vgaDev == NULL) {
- fprintf(stderr, "%s: malloc: couldn't allocate memory\n", __FUNCTION__);
- return 0;
- }
-
- (*vgaDev)->rsrc = 0;
+ dev->vgaarb_rsrc = VGA_ARB_RSRC_NONE;
- if (((*vgaDev)->fd = open (VGAARB_DEV, O_RDWR)) < 0) {
+ if ((dev->vgaarb_fd = open (VGAARB_DEV, O_RDWR)) < 0) {
perror("device open failed");
- return 0;
+ return 1;
}
- return (*vgaDev)->fd;
+ return 0;
}
void
-pci_device_vgaarb_fini(vga_arb_ptr vgaDev)
+pci_device_vgaarb_fini(struct pci_device *dev)
{
- if (close(vgaDev->fd) == -1)
+ if (close(dev->vgaarb_fd) == -1)
perror("device close failed");
}
}
static const char *
-rsrc_to_str(VgaArbRsrcType iostate)
+rsrc_to_str(int iostate)
{
switch (iostate) {
case VGA_ARB_RSRC_LEGACY_IO | VGA_ARB_RSRC_LEGACY_MEM:
}
#endif
int
-pci_device_vgaarb_set_target(vga_arb_ptr vgaDev, unsigned int domain,
- unsigned int bus, unsigned int dev, unsigned int fn)
+pci_device_vgaarb_set_target(struct pci_device *dev)
{
int len;
char buf[BUFSIZE];
len = snprintf(buf, BUFSIZE, "target PCI:%d:%d:%d.%d",
- domain, bus, dev, fn);
+ dev->domain, dev->bus, dev->dev, dev->func);
- return vgaarb_write(vgaDev->fd, buf, len);
+ return vgaarb_write(dev->vgaarb_fd, buf, len);
}
int
-pci_device_vgaarb_decodes(vga_arb_ptr vgaDev)
+pci_device_vgaarb_decodes(struct pci_device *dev)
{
int len;
char buf[BUFSIZE];
- len = snprintf(buf, BUFSIZE, "decodes %s", rsrc_to_str(vgaDev->rsrc));
+ len = snprintf(buf, BUFSIZE, "decodes %s", rsrc_to_str(dev->vgaarb_rsrc));
- return vgaarb_write(vgaDev->fd, buf, len);
+ return vgaarb_write(dev->vgaarb_fd, buf, len);
}
int
-pci_device_vgaarb_lock(vga_arb_ptr vgaDev)
+pci_device_vgaarb_lock(struct pci_device *dev)
{
int len;
char buf[BUFSIZE];
- len = snprintf(buf, BUFSIZE, "lock %s", rsrc_to_str(vgaDev->rsrc));
+ len = snprintf(buf, BUFSIZE, "lock %s", rsrc_to_str(dev->vgaarb_rsrc));
- return vgaarb_write(vgaDev->fd, buf, len);
+ return vgaarb_write(dev->vgaarb_fd, buf, len);
}
int
-pci_device_vgaarb_trylock(vga_arb_ptr vgaDev)
+pci_device_vgaarb_trylock(struct pci_device *dev)
{
int len, write_ret;
char buf[BUFSIZE];
- len = snprintf(buf, BUFSIZE, "trylock %s", rsrc_to_str(vgaDev->rsrc));
+ len = snprintf(buf, BUFSIZE, "trylock %s", rsrc_to_str(dev->vgaarb_rsrc));
- write_ret = vgaarb_write(vgaDev->fd, buf, len);
+ write_ret = vgaarb_write(dev->vgaarb_fd, buf, len);
if (write_ret == 0)
return -1;
}
int
-pci_device_vgaarb_unlock(vga_arb_ptr vgaDev)
+pci_device_vgaarb_unlock(struct pci_device *dev)
{
int len;
char buf[BUFSIZE];
- len = snprintf(buf, BUFSIZE, "unlock %s", rsrc_to_str(vgaDev->rsrc));
+ len = snprintf(buf, BUFSIZE, "unlock %s", rsrc_to_str(dev->vgaarb_rsrc));
- return vgaarb_write(vgaDev->fd, buf, len);
+ return vgaarb_write(dev->vgaarb_fd, buf, len);
}
int
-vga_arb_read(vga_arb_ptr vgaDev)
+vga_arb_set_target(struct pci_device *dev)
{
return 1;
}
int
-vga_arb_set_target(vga_arb_ptr vgaDev, unsigned int domain, unsigned int bus,
- unsigned int dev, unsigned int fn)
+vga_arb_lock(struct pci_device *dev)
{
return 1;
}
int
-vga_arb_lock(vga_arb_ptr vgaDev)
+vga_arb_trylock(struct pci_device *dev)
{
return 1;
}
int
-vga_arb_trylock(vga_arb_ptr vgaDev)
+vga_arb_unlock(struct pci_device *dev)
{
return 1;
}
int
-vga_arb_unlock(vga_arb_ptr vgaDev)
+vga_arb_decodes(struct pci_device *dev)
{
return 1;
}
int
-vga_arb_decodes(vga_arb_ptr vgaDev)
-{
- return 1;
-}
-
-int
-vga_arb_init(vga_arb_ptr *vgaDev)
+vga_arb_init(struct pci_device *dev)
{
#ifdef DEBUG
fprintf(stderr, "%s: YOU'RE USING THE STUB FUNCTIONS!\n", __FUNCTION__);
}
void
-vga_arb_fini(vga_arb_ptr vgaDev)
+vga_arb_fini(struct pci_device *dev)
{
}