#ifndef __PPBUS_BASE_H
#define __PPBUS_BASE_H
#include <sys/bus.h>
#include <dev/ppbus/ppbus_msq.h>
#define STROBE 0x01
#define AUTOFEED 0x02
#define nINIT 0x04
#define SELECTIN 0x08
#define IRQENABLE 0x10
#define PCD 0x20
#define nSTROBE inv(STROBE)
#define nAUTOFEED inv(AUTOFEED)
#define INIT inv(nINIT)
#define nSELECTIN inv(SELECTIN)
#define nPCD inv(PCD)
#define TIMEOUT 0x01
#define nFAULT 0x08
#define SELECT 0x10
#define PERROR 0x20
#define nACK 0x40
#define nBUSY 0x80
#define HOSTCLK nSTROBE
#define HOSTBUSY nAUTOFEED
#define ACTIVE1284 nSELECTIN
#define PTRCLK nACK
#define PTRBUSY BUSY
#define ACKDATAREQ PERROR
#define XFLAG SELECT
#define nDATAVAIL nERROR
#define HOSTACK nAUTOFEED
#define nREVREQ nINIT
#define PERICLK nACK
#define PERIACK BUSY
#define nACKREV PERROR
#define nPERIREQ nERROR
#define nWRITE nSTROBE
#define nDATASTB nAUTOFEED
#define nADDRSTB nSELECTIN
#define nWAIT BUSY
#define ECR_FIFO_EMPTY 0x1
#define ECR_FIFO_FULL 0x2
#define ECR_SERVICE_INTR 0x4
#define ECR_ENABLE_DMA 0x8
#define ECR_nFAULT_INTR 0x10
#define ECR_STD 0x00
#define ECR_PS2 0x20
#define ECR_FIFO 0x40
#define ECR_ECP 0x60
#define ECR_EPP 0x80
#define ECR_TST 0xc0
#define PPBUS_PNP_PRINTER 0
#define PPBUS_PNP_MODEM 1
#define PPBUS_PNP_NET 2
#define PPBUS_PNP_HDC 3
#define PPBUS_PNP_PCMCIA 4
#define PPBUS_PNP_MEDIA 5
#define PPBUS_PNP_FDC 6
#define PPBUS_PNP_PORTS 7
#define PPBUS_PNP_SCANNER 8
#define PPBUS_PNP_DIGICAM 9
#define PPBUS_PNP_UNKNOWN 10
struct ppbus_status {
unsigned char status;
unsigned int timeout:1;
unsigned int error:1;
unsigned int select:1;
unsigned int paper_end:1;
unsigned int ack:1;
unsigned int busy:1;
};
#define PPBUS_DONTWAIT 0
#define PPBUS_NOINTR 0
#define PPBUS_WAIT 0x1
#define PPBUS_INTR 0x2
#define PPBUS_POLL 0x4
#define PPBUS_FOREVER -1
int ppbus_scan_bus(device_t);
void ppbus_pnp_detect(device_t);
int ppbus_request_bus(device_t, device_t, int, unsigned int);
int ppbus_release_bus(device_t, device_t, int, unsigned int);
int ppbus_get_status(device_t, struct ppbus_status *);
int ppbus_poll_bus(device_t, int, char, char, int);
int ppbus_read_ivar(device_t, int, unsigned int *);
int ppbus_write_ivar(device_t, int, unsigned int *);
int ppbus_reset_epp_timeout(device_t);
int ppbus_ecp_sync(device_t);
int ppbus_set_mode(device_t, int, int);
int ppbus_get_mode(device_t);
int ppbus_write(device_t, char *, int, int, size_t *);
int ppbus_read(device_t, char *, int, int, size_t *);
int ppbus_exec_microseq(device_t, struct ppbus_microseq * *);
int ppbus_io(device_t, int, u_char *, int, u_char);
int ppbus_dma_malloc(device_t, void **, bus_addr_t *, bus_size_t);
int ppbus_dma_free(device_t, void **, bus_addr_t *, bus_size_t);
int ppbus_add_handler(device_t, void (*)(void *), void *);
int ppbus_remove_handler(device_t, void (*)(void *));
#endif