Blame src/detect.h

Packit d36e9b
/*
Packit d36e9b
 * libieee1284 - IEEE 1284 library
Packit d36e9b
 * Copyright (C) 2001, 2002, 2003  Tim Waugh <twaugh@redhat.com>
Packit d36e9b
 *
Packit d36e9b
 * This program is free software; you can redistribute it and/or modify
Packit d36e9b
 * it under the terms of the GNU General Public License as published by
Packit d36e9b
 * the Free Software Foundation; either version 2 of the License, or
Packit d36e9b
 * (at your option) any later version.
Packit d36e9b
 *
Packit d36e9b
 * This program is distributed in the hope that it will be useful,
Packit d36e9b
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit d36e9b
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit d36e9b
 * GNU General Public License for more details.
Packit d36e9b
 *
Packit d36e9b
 * You should have received a copy of the GNU General Public License
Packit d36e9b
 * along with this program; if not, write to the Free Software
Packit d36e9b
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit d36e9b
 */
Packit d36e9b
Packit d36e9b
// The virtualized interface.  This allows different implementations
Packit d36e9b
// of each function, without the runtime hit of having to decide which
Packit d36e9b
// implementation to use every time the function is called.
Packit d36e9b
Packit d36e9b
#ifndef _DETECT_H_
Packit d36e9b
#define _DETECT_H_
Packit d36e9b
Packit d36e9b
#include <stdlib.h>
Packit d36e9b
#ifndef _MSC_VER
Packit d36e9b
#include <sys/time.h>
Packit d36e9b
#else
Packit d36e9b
#include <winsock2.h>
Packit d36e9b
#endif
Packit d36e9b
Packit d36e9b
#if (defined __MINGW32__ || defined _MSC_VER) && !defined OWN_SSIZE_T
Packit d36e9b
#include <basetsd.h> /* for SSIZE_T */
Packit d36e9b
#define OWN_SSIZE_T
Packit d36e9b
typedef SSIZE_T ssize_t;
Packit d36e9b
#endif
Packit d36e9b
Packit d36e9b
struct parport;
Packit d36e9b
struct parport_internal;
Packit d36e9b
Packit d36e9b
struct parport_access_methods
Packit d36e9b
{
Packit d36e9b
  int (*init) (struct parport *pport, int flags, int *capabilities);
Packit d36e9b
  void (*cleanup) (struct parport_internal *port);
Packit d36e9b
Packit d36e9b
  int (*claim) (struct parport_internal *port);
Packit d36e9b
  void (*release) (struct parport_internal *port);
Packit d36e9b
Packit d36e9b
  unsigned char (*do_inb) (struct parport_internal *port, unsigned long addr);
Packit d36e9b
  void (*do_outb) (struct parport_internal *port, unsigned char val,
Packit d36e9b
		unsigned long addr);
Packit d36e9b
Packit d36e9b
  int (*get_irq_fd) (struct parport_internal *port);
Packit d36e9b
  int (*clear_irq) (struct parport_internal *port, unsigned int *count);
Packit d36e9b
Packit d36e9b
  int (*read_data) (struct parport_internal *port);
Packit d36e9b
  void (*write_data) (struct parport_internal *port, unsigned char st);
Packit d36e9b
  int (*wait_data) (struct parport_internal *port, unsigned char mask,
Packit d36e9b
		    unsigned char val, struct timeval *timeout);
Packit d36e9b
  int (*data_dir) (struct parport_internal *port, int reverse);
Packit d36e9b
Packit d36e9b
  int (*read_status) (struct parport_internal *port);
Packit d36e9b
  int (*wait_status) (struct parport_internal *port,
Packit d36e9b
		      unsigned char mask, unsigned char val,
Packit d36e9b
		      struct timeval *timeout);
Packit d36e9b
Packit d36e9b
  int (*read_control) (struct parport_internal *port);
Packit d36e9b
  void (*write_control) (struct parport_internal *port,
Packit d36e9b
			 unsigned char ct);
Packit d36e9b
  void (*frob_control) (struct parport_internal *port,
Packit d36e9b
			unsigned char mask, unsigned char val);
Packit d36e9b
Packit d36e9b
  int (*do_nack_handshake) (struct parport_internal *port,
Packit d36e9b
			    unsigned char ct_before,
Packit d36e9b
			    unsigned char ct_after,
Packit d36e9b
			    struct timeval *timeout);
Packit d36e9b
Packit d36e9b
  int (*negotiate) (struct parport_internal *port, int mode);
Packit d36e9b
  void (*terminate) (struct parport_internal *port);
Packit d36e9b
Packit d36e9b
  int (*ecp_fwd_to_rev) (struct parport_internal *port);
Packit d36e9b
  int (*ecp_rev_to_fwd) (struct parport_internal *port);
Packit d36e9b
Packit d36e9b
  ssize_t (*nibble_read) (struct parport_internal *port, int flags,
Packit d36e9b
			  char *buffer, size_t len);
Packit d36e9b
  ssize_t (*compat_write) (struct parport_internal *port, int flags,
Packit d36e9b
			   const char *buffer, size_t len);
Packit d36e9b
  ssize_t (*byte_read) (struct parport_internal *port, int flags,
Packit d36e9b
			char *buffer, size_t len);
Packit d36e9b
  ssize_t (*epp_read_data) (struct parport_internal *port, int flags,
Packit d36e9b
			    char *buffer, size_t len);
Packit d36e9b
  ssize_t (*epp_write_data) (struct parport_internal *port, int flags,
Packit d36e9b
			     const char *buffer, size_t len);
Packit d36e9b
  ssize_t (*epp_read_addr) (struct parport_internal *port, int flags,
Packit d36e9b
			    char *buffer, size_t len);
Packit d36e9b
  ssize_t (*epp_write_addr) (struct parport_internal *port, int flags,
Packit d36e9b
			     const char *buffer, size_t len);
Packit d36e9b
  ssize_t (*ecp_read_data) (struct parport_internal *port, int flags,
Packit d36e9b
			    char *buffer, size_t len);
Packit d36e9b
  ssize_t (*ecp_write_data) (struct parport_internal *port, int flags,
Packit d36e9b
			     const char *buffer, size_t len);
Packit d36e9b
  ssize_t (*ecp_read_addr) (struct parport_internal *port, int flags,
Packit d36e9b
			    char *buffer, size_t len);
Packit d36e9b
  ssize_t (*ecp_write_addr) (struct parport_internal *port, int flags,
Packit d36e9b
			     const char *buffer, size_t len);
Packit d36e9b
  struct timeval *(*set_timeout) (struct parport_internal *port,
Packit d36e9b
				  struct timeval *timeout);
Packit d36e9b
};
Packit d36e9b
Packit d36e9b
enum ieee1284_phase {
Packit d36e9b
  PH1284_FWD_DATA,
Packit d36e9b
  PH1284_FWD_IDLE,
Packit d36e9b
  PH1284_TERMINATE,
Packit d36e9b
  PH1284_NEGOTIATION,
Packit d36e9b
  PH1284_HBUSY_DNA,
Packit d36e9b
  PH1284_REV_IDLE,
Packit d36e9b
  PH1284_HBUSY_DAVAIL,
Packit d36e9b
  PH1284_REV_DATA,
Packit d36e9b
  PH1284_ECP_SETUP,
Packit d36e9b
  PH1284_ECP_FWD_TO_REV,
Packit d36e9b
  PH1284_ECP_REV_TO_FWD,
Packit d36e9b
  PH1284_ECP_DIR_UNKNOWN,
Packit d36e9b
};
Packit d36e9b
Packit d36e9b
struct parport_internal
Packit d36e9b
{
Packit d36e9b
  int type;
Packit d36e9b
  char *device;
Packit d36e9b
  char *udevice;
Packit d36e9b
  unsigned long base;
Packit d36e9b
  unsigned long base_hi;
Packit d36e9b
  int interrupt;
Packit d36e9b
  int fd;
Packit d36e9b
  int opened;
Packit d36e9b
  int claimed;
Packit d36e9b
  unsigned char ctr;
Packit d36e9b
Packit d36e9b
  /* IEEE 1284 stuff */
Packit d36e9b
  int current_mode;
Packit d36e9b
  int current_channel;
Packit d36e9b
  /* For ECPSWE */
Packit d36e9b
  enum ieee1284_phase current_phase;
Packit d36e9b
Packit d36e9b
  /* Reference count */
Packit d36e9b
  int ref;
Packit d36e9b
Packit d36e9b
  struct parport_access_methods *fn;
Packit d36e9b
  void *access_priv; /* For the access methods to use. */
Packit d36e9b
};
Packit d36e9b
Packit d36e9b
#define IO_CAPABLE			(1<<0)
Packit d36e9b
#define PPDEV_CAPABLE			(1<<1)
Packit d36e9b
#define PROC_PARPORT_CAPABLE		(1<<2)
Packit d36e9b
#define PROC_SYS_DEV_PARPORT_CAPABLE	(1<<3)
Packit d36e9b
#define DEV_LP_CAPABLE			(1<<4)
Packit d36e9b
#define DEV_PORT_CAPABLE		(1<<5)
Packit d36e9b
#define LPT_CAPABLE			(1<<6)
Packit d36e9b
extern int capabilities;
Packit d36e9b
Packit d36e9b
extern int detect_environment (int forbidden);
Packit d36e9b
Packit d36e9b
extern int deref_port (struct parport *port);
Packit d36e9b
Packit d36e9b
#endif /* _DETECT_H_ */
Packit d36e9b
Packit d36e9b
/*
Packit d36e9b
 * Local Variables:
Packit d36e9b
 * eval: (c-set-style "gnu")
Packit d36e9b
 * End:
Packit d36e9b
 */