diff options
-rw-r--r-- | include/pciaccess.h | 15 | ||||
-rw-r--r-- | src/common_vgaarb.c | 97 | ||||
-rw-r--r-- | src/common_vgaarb_stub.c | 44 |
3 files changed, 48 insertions, 108 deletions
diff --git a/include/pciaccess.h b/include/pciaccess.h index b7dad13..fa6787f 100644 --- a/include/pciaccess.h +++ b/include/pciaccess.h @@ -377,8 +377,8 @@ struct pci_device { intptr_t user_data; /** - * Used by the VGA arbiter. Kind of resource decoded by the device and - * the file descriptor. */ + * Used by the VGA arbiter. Type of resource decoded by the device and + * the file descriptor (/dev/vga_arbiter). */ int vgaarb_rsrc; int vgaarb_fd; }; @@ -493,17 +493,6 @@ struct pci_pcmcia_bridge_info { #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 - * and 0 if something goes wrong. - * vga_arb_trylock returns 1 on success, 0 if the lock failed and -1 if - * something went wrong. - * - * But I really don't think you should be checking the return values. The lib - * checks for these errors but they should never happen, and when they happen - * it will print error messages at stderr. - * - */ 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); diff --git a/src/common_vgaarb.c b/src/common_vgaarb.c index 9cf7385..3ac3779 100644 --- a/src/common_vgaarb.c +++ b/src/common_vgaarb.c @@ -25,33 +25,23 @@ * */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <string.h> #include <stdio.h> -#include <stdlib.h> #include <unistd.h> -#include <sys/types.h> -#include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include "pciaccess.h" -/* ALL messages *should* fit in this buffer */ -#define BUFSIZE 128 -#define VGAARB_DEV "/dev/vga_arbiter" +#define BUFSIZE 32 int pci_device_vgaarb_init(struct pci_device *dev) { dev->vgaarb_rsrc = VGA_ARB_RSRC_NONE; - if ((dev->vgaarb_fd = open (VGAARB_DEV, O_RDWR)) < 0) { - perror("device open failed"); - return 1; + if ((dev->vgaarb_fd = open ("/dev/vga_arbiter", O_RDWR)) < 0) { + fprintf(stderr, "device open failed"); + return errno; } return 0; @@ -60,49 +50,50 @@ pci_device_vgaarb_init(struct pci_device *dev) void pci_device_vgaarb_fini(struct pci_device *dev) { - if (close(dev->vgaarb_fd) == -1) - perror("device close failed"); + if (close(dev->vgaarb_fd) != 0) + fprintf(stderr, "device close failed"); } -/* - * Writes the message on the device. +/** + * Writes messages on vga device. The messages is defined by the kernel + * implementation. * - * Returns: 0 if something went wrong - * 1 if everything is ok - * 2 if the device returned EBUSY (used ONLY by trylock) + * \param fd vga arbiter device. + * \param buf message itself. + * \param len message length. + * + * \return + * Zero on success, 1 if something gets wrong and 2 if fd is busy (only for + * 'trylock') */ static int 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. */ + /* the user may have called "trylock" and didn't get the lock */ if (errno == EBUSY) return 2; - perror("write error"); - return 0; + fprintf(stderr, "write error"); + return 1; } else if (ret != len) { - /* 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; + /* it's need to receive the exactly amount required. */ + fprintf(stderr, "write error: wrote different than expected\n"); + return 1; } #ifdef DEBUG fprintf(stderr, "%s: successfully wrote: '%s'\n", __FUNCTION__, buf); #endif - return 1; + return 0; } static const char * @@ -119,35 +110,7 @@ rsrc_to_str(int iostate) return "none"; } -#if 0 -int -vga_arb_read(vga_arb_ptr vgaDev) -{ - int ret; - char buf[BUFSIZE]; - - ret = read (vgaDev->fd, buf, BUFSIZE); - - /* Just to make sure... */ - buf[ret]='\0'; - - if (ret == 0) { - /* It always has something to be read. */ - fprintf(stderr, "%s: error: there is nothing to read\n", __FUNCTION__); - return 0; - } - else if (ret == -1) { - perror("read error"); - return 0; - } - -#ifdef DEBUG - fprintf(stderr, "%s: sucessfully read: '%s'\n", __FUCNTION__, buf); -#endif - return 1; -} -#endif int pci_device_vgaarb_set_target(struct pci_device *dev) { @@ -185,20 +148,12 @@ pci_device_vgaarb_lock(struct pci_device *dev) int pci_device_vgaarb_trylock(struct pci_device *dev) { - int len, write_ret; + int len; char buf[BUFSIZE]; len = snprintf(buf, BUFSIZE, "trylock %s", rsrc_to_str(dev->vgaarb_rsrc)); - write_ret = vgaarb_write(dev->vgaarb_fd, buf, len); - - if (write_ret == 0) - return -1; - else if (write_ret == 1) - return 1; - else - /* write_ret == 2 and the lock failed */ - return 0; + return vgaarb_write(dev->vgaarb_fd, buf, len); } int diff --git a/src/common_vgaarb_stub.c b/src/common_vgaarb_stub.c index e849214..5fc5dfe 100644 --- a/src/common_vgaarb_stub.c +++ b/src/common_vgaarb_stub.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007 Paulo R. Zanoni, Tiago Vignatti + * Copyright (c) 2009 Tiago Vignatti * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation @@ -24,54 +24,50 @@ * */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - #include <stdio.h> #include "pciaccess.h" - int -pci_device_vgaarb_target(struct pci_device *dev) +pci_device_vgaarb_init(struct pci_device *dev) { - return 1; +#ifdef DEBUG + fprintf(stderr, "%s: You're using VGA arbiter stub functions!\n", + __FUNCTION__); +#endif + return 0; } -int -pci_device_vgaarb_lock(struct pci_device *dev) +void +pci_device_vgaarb_fini(struct pci_device *dev) { - return 1; } int -pci_device_vgaarb_trylock(struct pci_device *dev) +pci_device_vgaarb_set_target(struct pci_device *dev) { - return 1; + return 0; } int -pci_device_vgaarb_unlock(struct pci_device *dev) +pci_device_vgaarb_decodes(struct pci_device *dev) { - return 1; + return 0; } int -pci_device_vgaarb_decodes(struct pci_device *dev) +pci_device_vgaarb_lock(struct pci_device *dev) { - return 1; + return 0; } int -pci_device_vgaarb_init(struct pci_device *dev) +pci_device_vgaarb_trylock(struct pci_device *dev) { -#ifdef DEBUG - fprintf(stderr, "%s: YOU'RE USING THE STUB FUNCTIONS!\n", __FUNCTION__); -#endif - return 1; + return 0; } -void -pci_device_vgaarb_fini(struct pci_device *dev) +int +pci_device_vgaarb_unlock(struct pci_device *dev) { + return 0; } |