2025-04-30 16:24:29 +08:00

293 lines
9.4 KiB
C

#ifndef __ASM_ARCH_EM9X60_DRIVERS_H
#define __ASM_ARCH_EM9X60_DRIVERS_H
#ifdef EMTRONIX_EM9360
#include <asm-generic/ioctl.h>
typedef unsigned int DWORD;
#endif //EMTRONIX_EM9360
#ifdef WIN32
#include <windows.h>
#elif defined (VXWORKS)
typedef unsigned int DWORD;
#endif
#define EM9X60_DEV_MAJOR 251
#define EM9X60_SYSINFO_MINOR 0 //em9x60_sysinfo
#define EM9X60_ISA_MINOR 1 //em9x60_isa
#define EM9X60_GPIO_MINOR 2 //em9x60_gpio
#define EM9X60_KEYPAD_MINOR 3 //em9x60_keypad
#define EM9X60_IRQ1_MINOR 4 //em9x60_irq1
#define EM9X60_IRQ2_MINOR 5 //em9x60_irq2 (EM9160 only)
#define EM9X60_CAN1_MINOR 6 //em9x60_can1
#define EM9X60_CAN2_MINOR 7 //em9x60_can2 (base on ISA)
#define EM9X60_PWM1_MINOR 8 //em9x60_pwm1(->GPIO12 of EM9160)
#define EM9X60_PWM2_MINOR 9 //em9x60_pwm2(->GPIO14 of EM9160)
#define EM9X60_PWM3_MINOR 10 //em9x60_pwm3(->GPIO15 of EM9160)
#define EM9X60_I2C_MINOR 11 //em9x60_i2c (GPIO based)
#define EM9X60_LCD_MINOR 12 //em9x60_lcd
#define EM9X60_SPI_MINOR 13 //em9x60_spi(use hardware SPI1)
#define EM9X60_BOARD_TYPE_EM9160 1
#define EM9X60_BOARD_TYPE_EM9260 2
#define EM9X60_BOARD_TYPE_EM9360 3
#define EM9X60_BOARD_TYPE_EM9460 4
struct isa_io
{
unsigned long dwOffset;
unsigned char ucValue;
};
typedef unsigned int KEY_CODE;
/*
struct can_msg
{
unsigned int id; //identifier (11 or 29 bits)
int type; //standard(0) or extended frame(1)
int rtr; //remote transmission request(1 when true)
int len; //data length 0..8
unsigned char data[8]; //data bytes
struct timeval timestamp; // timestamp for received messages in the format of [seconds, microseconds] since Epoch (january 1. 1970).
};
*/
typedef struct
{
unsigned int accept_code;
unsigned int accept_mask;
unsigned char filter_mode;
} accept_filter;
typedef struct
{
DWORD NumISTEvents;
DWORD NumRxDataFrameInt;
DWORD NumRxDataFramePutRing;
DWORD NumTxDataFramePutRing;
DWORD NumTxDataFrameInt;
DWORD NumTxSuccessful;
DWORD NumTxFailed;
DWORD NumErrorWarningInt;
DWORD NumErrorWarningLevel;
DWORD NumErrorPassive;
DWORD NumErrorBusOff;
DWORD NumSwitchedToNormalOperation;
DWORD NumOverrunInt;
DWORD NumBusErrorInt;
DWORD NumArbitrationLostInt;
DWORD MaxNumMsgsInRing;
DWORD RXErrorCounter;
DWORD TXErrorCounter;
DWORD Status;
} drv_statistics;
/*
* Emlinix JUN-2-2010: double input parameters can be used in more than one driver
*/
typedef struct
{
unsigned int par1;
unsigned int par2;
} double_pars;
/*
* Emlinix JUN-3-2010: struct for i2c driver
*/
struct i2c_config
{
unsigned int scl_gpio_num; // = 0, .. 31 => GPIO0 - GPIO31
unsigned int sda_gpio_num; // = 0, .. 31 => GPIO0 - GPIO31
unsigned int speed; // = 0: normal(about 200kbps); = 1: 400kbps; = 2: full-speed(>1Mbps)
};
struct i2c_io
{
unsigned int dev_addr; // chip physical address
unsigned int reg_addr; // register address in chip
unsigned int data_len; // data length <= 16
unsigned char data_buf[128];
};
/*
* Emlinix JUN-3-2010: struct for i2c driver
*/
struct lcd_line
{
unsigned int type; // = 0: point; = 1: line; = 2: bar
unsigned int x0;
unsigned int y0;
unsigned int x1;
unsigned int y1;
unsigned int color; // = 0: write "0"; = 1: write "1", = 2: xor operation
};
struct lcd_block
{
unsigned int x0;
unsigned int y0;
unsigned int xsize; // = 1 - 8; left alignment
unsigned int ysize; // = 1 - 16;
unsigned char data[16]; // block data to be copied
};
struct spi_config
{
unsigned int uCPOL; // clock polarity = 0: ; = 1:
unsigned int uCPHA; // clock phase = 0: ; = 1:
unsigned int data_bit; // = 8, 9, .. 16
unsigned int baudrate; // < 100000000bps => 100Mbps
};
/*
* Emlinix FEB-15-2010: ioctl cmd code definitions:
*/
#define EM9X60_MAGIC EM9X60_DEV_MAJOR
#define EM9X60_SYSINFO_IOCTL_GET_DBGSL _IOR(EM9X60_MAGIC, 0x00, unsigned int)
#define EM9X60_SYSINFO_IOCTL_GET_BOARDTYPE _IOR(EM9X60_MAGIC, 0x01, unsigned int)
#define EM9X60_SYSINFO_IOCTL_GET_VID _IOR(EM9X60_MAGIC, 0x02, unsigned int)
#define EM9X60_SYSINFO_IOCTL_GET_UID _IOR(EM9X60_MAGIC, 0x03, unsigned int)
#define EM9X60_ISA_IOCTL_READ_LCDTYPE _IOR(EM9X60_MAGIC, 0x40, unsigned int)
#define EM9X60_ISA_IOCTL_WRITE_LCDTYPE _IOW(EM9X60_MAGIC, 0x41, unsigned int)
#define EM9X60_ISA_IOCTL_READ_LCD _IOWR(EM9X60_MAGIC, 0x42, struct isa_io)
#define EM9X60_ISA_IOCTL_WRITE_LCD _IOW(EM9X60_MAGIC, 0x43, struct isa_io)
#define EM9X60_ISA_IOCTL_READ_CS0 _IOWR(EM9X60_MAGIC, 0x44, struct isa_io)
#define EM9X60_ISA_IOCTL_WRITE_CS0 _IOW(EM9X60_MAGIC, 0x45, struct isa_io)
#define EM9X60_ISA_IOCTL_READ_CS1 _IOWR(EM9X60_MAGIC, 0x46, struct isa_io)
#define EM9X60_ISA_IOCTL_WRITE_CS1 _IOW(EM9X60_MAGIC, 0x47, struct isa_io)
#define EM9X60_GPIO_IOCTL_OUT_ENABLE _IOW(EM9X60_MAGIC, 0x60, unsigned int)
#define EM9X60_GPIO_IOCTL_OUT_DISABLE _IOW(EM9X60_MAGIC, 0x61, unsigned int)
#define EM9X60_GPIO_IOCTL_OUT_SET _IOW(EM9X60_MAGIC, 0x62, unsigned int)
#define EM9X60_GPIO_IOCTL_OUT_CLEAR _IOW(EM9X60_MAGIC, 0x63, unsigned int)
#define EM9X60_GPIO_IOCTL_OPEN_DRAIN _IOW(EM9X60_MAGIC, 0x64, unsigned int)
#define EM9X60_GPIO_IOCTL_PIN_STATE _IOR(EM9X60_MAGIC, 0x65, unsigned int)
#define EM9X60_IRQ_IOCTL_GET_COUNT _IOR(EM9X60_MAGIC, 0x80, unsigned int)
#define EM9X60_CAN_IOCTL_START_CHIP _IO(EM9X60_MAGIC, 0xa0)
#define EM9X60_CAN_IOCTL_STOP_CHIP _IO(EM9X60_MAGIC, 0xa1)
#define EM9X60_CAN_IOCTL_SET_BAUD _IOW(EM9X60_MAGIC, 0xa2, unsigned int)
#define EM9X60_CAN_IOCTL_SET_FILTER _IOW(EM9X60_MAGIC, 0xa3, accept_filter)
#define EM9X60_CAN_IOCTL_GET_ERRORCODE _IOR(EM9X60_MAGIC, 0xa4, unsigned int)
#define EM9X60_CAN_IOCTL_READ_REG _IOWR(EM9X60_MAGIC, 0xa5, struct isa_io)
#define EM9X60_CAN_IOCTL_GET_STATISTICS _IOR(EM9X60_MAGIC, 0xa6, drv_statistics)
#define EM9X60_CAN_IOCTL_SET_SELFTEST _IOW(EM9X60_MAGIC, 0xa7, unsigned int)
#define EM9X60_CAN_IOCTL_GET_ECCREG _IOR(EM9X60_MAGIC, 0xa8, unsigned int)
//#define EM9X60_CAN_IOCTL_CLEAR_RXBUF _IO(EM9X60_MAGIC, 0xa9)
//#define EM9X60_CAN_IOCTL_CLEAR_TXBUF _IO(EM9X60_MAGIC, 0xaa)
//#define EM9X60_CAN_IOCTL_LAST_TIMESTAMP _IOR(EM9X60_MAGIC, 0xab, struct timeval)
#define EM9X60_PWM_IOCTL_START _IOW(EM9X60_MAGIC, 0xb0, struct double_pars)
#define EM9X60_PWM_IOCTL_STOP _IO(EM9X60_MAGIC, 0xb1)
#define EM9X60_I2C_IOCTL_CONFIG _IOW(EM9X60_MAGIC, 0xc0, struct i2c_config)
#define EM9X60_I2C_IOCTL_WRITE _IOW(EM9X60_MAGIC, 0xc1, struct i2c_io)
#define EM9X60_I2C_IOCTL_READ _IOWR(EM9X60_MAGIC, 0xc2, struct i2c_io)
#define EM9X60_LCD_IOCTL_TYPE _IOW(EM9X60_MAGIC, 0xd0, unsigned int)
#define EM9X60_LCD_IOCTL_LINE _IOW(EM9X60_MAGIC, 0xd1, struct lcd_line)
#define EM9X60_LCD_IOCTL_BLOCK _IOW(EM9X60_MAGIC, 0xd2, struct lcd_block)
#define EM9X60_LCD_IOCTL_CLEAR _IO(EM9X60_MAGIC, 0xd3)
#define EM9X60_LCD_IOCTL_UPDATE _IO(EM9X60_MAGIC, 0xd4)
#define EM9X60_SPI_IOCTL_GET_CONFIG _IOR(EM9X60_MAGIC, 0xe0, struct spi_config)
#define EM9X60_SPI_IOCTL_SET_CONFIG _IOW(EM9X60_MAGIC, 0xe1, struct spi_config)
#define GPIO0 (1 << 0)
#define GPIO1 (1 << 1)
#define GPIO2 (1 << 2)
#define GPIO3 (1 << 3)
#define GPIO4 (1 << 4)
#define GPIO5 (1 << 5)
#define GPIO6 (1 << 6)
#define GPIO7 (1 << 7)
#define GPIO8 (1 << 8)
#define GPIO9 (1 << 9)
#define GPIO10 (1 << 10)
#define GPIO11 (1 << 11)
#define GPIO12 (1 << 12)
#define GPIO13 (1 << 13)
#define GPIO14 (1 << 14)
#define GPIO15 (1 << 15)
#define GPIO16 (1 << 16)
#define GPIO17 (1 << 17)
#define GPIO18 (1 << 18)
#define GPIO19 (1 << 19)
#define GPIO20 (1 << 20)
#define GPIO21 (1 << 21)
#define GPIO22 (1 << 22)
#define GPIO23 (1 << 23)
#define GPIO24 (1 << 24)
#define GPIO25 (1 << 25)
#define GPIO26 (1 << 26)
#define GPIO27 (1 << 27)
#define GPIO28 (1 << 28)
#define GPIO29 (1 << 29)
#define GPIO30 (1 << 30)
#define GPIO31 (1 << 31)
//--------------------definition for CAN driver------------------------
typedef enum
{
CAN_BAUDRATE_10K = 0,
CAN_BAUDRATE_20K, // = 1
CAN_BAUDRATE_50K, // = 2
CAN_BAUDRATE_100K, // = 3
CAN_BAUDRATE_125K, // = 4
CAN_BAUDRATE_250K, // = 5
CAN_BAUDRATE_500K, // = 6
CAN_BAUDRATE_1000K, // = 7
CAN_BAUDRATE_60K, // = 8
CAN_BAUDRATE_SIZE
} CAN_BAUDRATE;
#define CANCONTROLLER_NORMAL 0
#define CANCONTROLLER_WARNING_LIMIT_REACHED (1<<0) // 1
#define CANCONTROLLER_ERROR_PASSIVE (1<<1) // 2
#define CANCONTROLLER_BUS_OFF (1<<2) // 4
#define CANCONTROLLER_OVERRUN (1<<3) // 8
#define CANCONTROLLER_BUS_ERROR (1<<4) // 16
#define CANCONTROLLER_ABITRATION_LOST (1<<5) // 32
#define RING_BUFFER_FULL (1<<6) // 64
/*Emlinix MAY-18-2010: definitions for ISO7816 mode */
#define EM9X60_ISO7816_T0 (1 << 27) // D27 of termios.c_cflag
#define EM9X60_ISO7816_T1 (1 << 26) // D26 of termios.c_cflag
#define EM9X60_ISO7816_INACK (1 << 25) // D25 of termios.c_cflag
#define EM9X60_ISO7816_DSNACK (1 << 24) // D24 of termios.c_cflag
#define EM9X60_ISO7816_RXD_RESET (1 << 23) // D23 of termios.c_cflag
#define EM9X60_RTS_CONTROL_TOGGLE (1 << 15) // D15 of termios.c_cflag
#define EM9X60_ISO7816_MODE (EM9X60_ISO7816_T0 | EM9X60_ISO7816_T1)
#define EM9X60_LCD_KS0108_12864 1
#define EM9X60_LCD_T6963C_240128 2
#define EM9X60_LCD_R8835_320240 3
#define EM9X60_LCD_KS0108_19264 4
#define EM9X60_LCD_UC1698_160160 5
#define EM9X60_LCD_YXD_12864 6
#define WATCHDOG_IOCTL_BASE 'W'
#define WDIOC_KEEPALIVE _IOR(WATCHDOG_IOCTL_BASE, 5, int)
#endif //__ASM_ARCH_EM9X60_DRIVERS_H