diff options
author | Tiago Vignatti <vignatti@freedesktop.org> | 2009-05-13 18:31:09 -0300 |
---|---|---|
committer | Tiago Vignatti <vignatti@freedesktop.org> | 2009-05-13 18:31:09 -0300 |
commit | 812ad80018d49f6e4f1be8256d86488690c3ba52 (patch) | |
tree | 0fd500d7b0ec6b47df4a100b68c57c67c278fc28 | |
parent | b77b0fc3fbacc46d55998889f09326d1233339fc (diff) |
vgaarb: a bunch of clean ups to fit in libpciaccess style.
-rw-r--r-- | include/pciaccess.h | 39 | ||||
-rw-r--r-- | src/common_vgaarb.c | 155 |
2 files changed, 92 insertions, 102 deletions
diff --git a/include/pciaccess.h b/include/pciaccess.h index 2f0bf9d..4087264 100644 --- a/include/pciaccess.h +++ b/include/pciaccess.h @@ -481,11 +481,6 @@ struct pci_pcmcia_bridge_info { typedef int VgaArbRsrcType; -typedef struct { - int fd; - VgaArbRsrcType rsrc; -} vga_arb_rec, *vga_arb_ptr; - /* This is a mask that can be OR'ed */ #define VGA_ARB_RSRC_NONE 0 #define VGA_ARB_RSRC_LEGACY_IO 1 @@ -493,9 +488,14 @@ typedef struct { #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; + /* - * All functions, except vga_arb_trylock(), return 1 on success and 0 if - * something went wrong. + * With exception of vga_arb_trylock(), all functions bellow return 1 on success + * and 0 if something goes wrong. * vga_arb_trylock returns 1 on success, 0 if the lock failed and -1 if * something went wrong. * @@ -503,25 +503,14 @@ typedef struct { * checks for these errors but they should never happen, and when they happen * it will print error messages at stderr. * - * To understand the way these functions work see test/test2lib.c. */ - - -int vga_arb_set_target (vga_arb_ptr vgaDev, unsigned int domain, +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 vga_arb_read (vga_arb_ptr vgaDev); - -int vga_arb_lock (vga_arb_ptr vgaDev); - -int vga_arb_trylock (vga_arb_ptr vgaDev); - -int vga_arb_unlock (vga_arb_ptr vgaDev); - -int vga_arb_decodes (vga_arb_ptr vgaDev); - -int vga_arb_init (vga_arb_ptr *vgaDev); - -void vga_arb_fini (vga_arb_ptr vgaDev); +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); #endif /* PCIACCESS_H */ diff --git a/src/common_vgaarb.c b/src/common_vgaarb.c index df259d5..cc1e262 100644 --- a/src/common_vgaarb.c +++ b/src/common_vgaarb.c @@ -1,5 +1,6 @@ /* * Copyright (c) 2007 Paulo R. Zanoni, Tiago Vignatti + * 2009 Tiago Vignatti * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation @@ -41,8 +42,33 @@ /* ALL messages *should* fit in this buffer */ #define BUFSIZE 128 +#define VGAARB_DEV "/dev/vga_arbiter" -#define ARBITER_DEVICE "/dev/vga_arbiter" +int +pci_device_vgaarb_init(vga_arb_ptr *vgaDev) +{ + *vgaDev = malloc (sizeof(vga_arb_ptr *)); + if (vgaDev == NULL) { + fprintf(stderr, "%s: malloc: couldn't allocate memory\n", __FUNCTION__); + return 0; + } + + (*vgaDev)->rsrc = 0; + + if (((*vgaDev)->fd = open (VGAARB_DEV, O_RDWR)) < 0) { + perror("device open failed"); + return 0; + } + + return (*vgaDev)->fd; +} + +void +pci_device_vgaarb_fini(vga_arb_ptr vgaDev) +{ + if (close(vgaDev->fd) == -1) + perror("device close failed"); +} /* * Writes the message on the device. @@ -52,53 +78,54 @@ * 2 if the device returned EBUSY (used ONLY by trylock) */ static int -vga_arb_write(int fd, char *buf, int len) +vgaarb_write(int fd, char *buf, int len) { int ret; - + /* Just to make sure... */ buf[len] = '\0'; ret = write(fd, buf, len); if (ret == -1) { - /* Check for EBUSY: the user may have called "trylock" and didn't get - * the lock. */ - if (errno == EBUSY) - return 2; - perror("[libvgaaccess] write error"); - return 0; + /* Check for EBUSY: the user may have called "trylock" and didn't get + * the lock. */ + if (errno == EBUSY) + return 2; + + perror("write error"); + return 0; } else if (ret != len) { - /* The VGA arbiter implementation shouldn't recive less than one - * single message. It also shouldn't recive more. */ - fprintf(stderr, "[libvgaaccess] write error: " - "wrote less than expected!\n"); - return 0; + /* The VGA arbiter implementation shouldn't receive less than one + * single message. It also shouldn't receive more. */ + fprintf(stderr, "%s: write error: " + "wrote less than expected\n", __FUNCTION__); + return 0; } #ifdef DEBUG - fprintf(stderr, "[libvgaaccess] successfully wrote: '%s'.\n", buf); + fprintf(stderr, "%s: successfully wrote: '%s'\n", __FUNCTION__, buf); #endif return 1; } -/* Convert "integer rsrc" in "string rsrc" */ static const char * rsrc_to_str(VgaArbRsrcType iostate) { - switch (iostate) { - case VGA_ARB_RSRC_LEGACY_IO | VGA_ARB_RSRC_LEGACY_MEM: - return "io+mem"; - case VGA_ARB_RSRC_LEGACY_IO: - return "io"; - case VGA_ARB_RSRC_LEGACY_MEM: - return "mem"; - } - return "none"; -} + switch (iostate) { + case VGA_ARB_RSRC_LEGACY_IO | VGA_ARB_RSRC_LEGACY_MEM: + return "io+mem"; + case VGA_ARB_RSRC_LEGACY_IO: + return "io"; + case VGA_ARB_RSRC_LEGACY_MEM: + return "mem"; + } + return "none"; +} +#if 0 int vga_arb_read(vga_arb_ptr vgaDev) { @@ -113,23 +140,23 @@ vga_arb_read(vga_arb_ptr vgaDev) if (ret == 0) { /* It always has something to be read. */ - fprintf(stderr, "[libvgaaccess] error: there is nothing to read!\n"); + fprintf(stderr, "%s: error: there is nothing to read\n", __FUNCTION__); return 0; } else if (ret == -1) { - perror("[libvgaaccess] read error"); + perror("read error"); return 0; } -#ifdef DEBUG - fprintf(stderr, "[libvgaaccess]: sucessfully read: '%s'.\n", buf); +#ifdef DEBUG + fprintf(stderr, "%s: sucessfully read: '%s'\n", __FUCNTION__, buf); #endif return 1; } - +#endif int -vga_arb_set_target(vga_arb_ptr vgaDev, unsigned int domain, unsigned int bus, - unsigned int dev, unsigned int fn) +pci_device_vgaarb_set_target(vga_arb_ptr vgaDev, unsigned int domain, + unsigned int bus, unsigned int dev, unsigned int fn) { int len; char buf[BUFSIZE]; @@ -137,29 +164,40 @@ vga_arb_set_target(vga_arb_ptr vgaDev, unsigned int domain, unsigned int bus, len = snprintf(buf, BUFSIZE, "target PCI:%d:%d:%d.%d", domain, bus, dev, fn); - return vga_arb_write(vgaDev->fd, buf, len); + return vgaarb_write(vgaDev->fd, buf, len); } int -vga_arb_lock(vga_arb_ptr vgaDev) +pci_device_vgaarb_decodes(vga_arb_ptr vgaDev) +{ + int len; + char buf[BUFSIZE]; + + len = snprintf(buf, BUFSIZE, "decodes %s", rsrc_to_str(vgaDev->rsrc)); + + return vgaarb_write(vgaDev->fd, buf, len); +} + +int +pci_device_vgaarb_lock(vga_arb_ptr vgaDev) { int len; char buf[BUFSIZE]; len = snprintf(buf, BUFSIZE, "lock %s", rsrc_to_str(vgaDev->rsrc)); - return vga_arb_write(vgaDev->fd, buf, len); + return vgaarb_write(vgaDev->fd, buf, len); } int -vga_arb_trylock(vga_arb_ptr vgaDev) +pci_device_vgaarb_trylock(vga_arb_ptr vgaDev) { int len, write_ret; char buf[BUFSIZE]; len = snprintf(buf, BUFSIZE, "trylock %s", rsrc_to_str(vgaDev->rsrc)); - write_ret = vga_arb_write(vgaDev->fd, buf, len); + write_ret = vgaarb_write(vgaDev->fd, buf, len); if (write_ret == 0) return -1; @@ -171,49 +209,12 @@ vga_arb_trylock(vga_arb_ptr vgaDev) } int -vga_arb_unlock(vga_arb_ptr vgaDev) +pci_device_vgaarb_unlock(vga_arb_ptr vgaDev) { int len; char buf[BUFSIZE]; len = snprintf(buf, BUFSIZE, "unlock %s", rsrc_to_str(vgaDev->rsrc)); - return vga_arb_write(vgaDev->fd, buf, len); -} - -int -vga_arb_decodes(vga_arb_ptr vgaDev) -{ - int len; - char buf[BUFSIZE]; - - len = snprintf(buf, BUFSIZE, "decodes %s", rsrc_to_str(vgaDev->rsrc)); - - return vga_arb_write(vgaDev->fd, buf, len); -} - -int -vga_arb_init(vga_arb_ptr *vgaDev) -{ - *vgaDev = malloc (sizeof(vga_arb_ptr *)); - if (vgaDev == NULL) { - fprintf(stderr, "[libvgaaccess] malloc: couldn't allocate memory!\n"); - return 0; - } - - (*vgaDev)->rsrc = 0; - - if (((*vgaDev)->fd = open (ARBITER_DEVICE, O_RDWR)) < 0) { - perror("[libvgaaccess] device open failed"); - return 0; - } - - return (*vgaDev)->fd; -} - -void -vga_arb_fini(vga_arb_ptr vgaDev) -{ - if (close(vgaDev->fd) == -1) - perror("[libvgaaccess] device close failed"); + return vgaarb_write(vgaDev->fd, buf, len); } |