diff options
Diffstat (limited to 'drivers/dpram/raffaello/dpram.h')
-rwxr-xr-x | drivers/dpram/raffaello/dpram.h | 418 |
1 files changed, 418 insertions, 0 deletions
diff --git a/drivers/dpram/raffaello/dpram.h b/drivers/dpram/raffaello/dpram.h new file mode 100755 index 0000000..c6ed226 --- /dev/null +++ b/drivers/dpram/raffaello/dpram.h @@ -0,0 +1,418 @@ +/**************************************************************************** + +** + +** COPYRIGHT(C) : Samsung Electronics Co.Ltd, 2006-2010 ALL RIGHTS RESERVED + +** + +** AUTHOR : Kim, Geun-Young <geunyoung.kim@samsung.com> @LDK@ + +** @LDK@ + +****************************************************************************/ + +#ifndef __IDPRAM_H__ +#define __IDPRAM_H__ + +/* +** FEATURE DEFINITIONs +*/ +#define _DEBUG + +#define CDMA_IPC_C210_IDPRAM +#define DPRAM_SIZE_16KB + +//#define DPRAM_SIZE_32KB + +#if defined(DPRAM_SIZE_16KB) +/* +** DPRAM SETTINGS - 16K S5PC210 Internal DPRAM +*/ +#define DPRAM_SIZE 0x4000 /* 16KB */ +#define DPRAM_PDA2PHONE_FORMATTED_BUFFER_SIZE 1020 +#define DPRAM_PDA2PHONE_RAW_BUFFER_SIZE 7160 +#define DPRAM_PHONE2PDA_FORMATTED_BUFFER_SIZE 1020 +#define DPRAM_PHONE2PDA_RAW_BUFFER_SIZE 7160 +#define DPRAM_INTERRUPT_PORT_SIZE 2 +#elif defined(DPRAM_SIZE_32KB) +/* +** DPRAM SETTINGS - 32K External DPRAM +*/ +#define DPRAM_SIZE 0x8000 /* 32 KB */ +#define DPRAM_PDA2PHONE_FORMATTED_BUFFER_SIZE 4092 +#define DPRAM_PDA2PHONE_RAW_BUFFER_SIZE 12272 +#define DPRAM_PHONE2PDA_FORMATTED_BUFFER_SIZE 4092 +#define DPRAM_PHONE2PDA_RAW_BUFFER_SIZE 12272 +#define DPRAM_INTERRUPT_PORT_SIZE 2 +#else +#error "Feature is neither DPRAM_SIZE_16KB nor DPRAM_SIZE_32KB" +#endif /*DPRAM_SIZE_16KB*/ + +/* +** Memory Offsets +*/ +#define DPRAM_START_ADDRESS 0x0000 + +#define DPRAM_MAGIC_CODE_ADDRESS (DPRAM_START_ADDRESS) +#define DPRAM_ACCESS_ENABLE_ADDRESS (DPRAM_START_ADDRESS + 0x0002) + +#define DPRAM_PDA2PHONE_FORMATTED_START_ADDRESS (DPRAM_START_ADDRESS + 0x0004) +#define DPRAM_PDA2PHONE_FORMATTED_HEAD_ADDRESS (DPRAM_PDA2PHONE_FORMATTED_START_ADDRESS) +#define DPRAM_PDA2PHONE_FORMATTED_TAIL_ADDRESS (DPRAM_PDA2PHONE_FORMATTED_START_ADDRESS + 0x0002) +#define DPRAM_PDA2PHONE_FORMATTED_BUFFER_ADDRESS (DPRAM_PDA2PHONE_FORMATTED_START_ADDRESS + 0x0004) + +#define DPRAM_PDA2PHONE_RAW_START_ADDRESS (DPRAM_PDA2PHONE_FORMATTED_START_ADDRESS + DPRAM_PDA2PHONE_FORMATTED_BUFFER_SIZE + 4) +#define DPRAM_PDA2PHONE_RAW_HEAD_ADDRESS (DPRAM_PDA2PHONE_RAW_START_ADDRESS) +#define DPRAM_PDA2PHONE_RAW_TAIL_ADDRESS (DPRAM_PDA2PHONE_RAW_START_ADDRESS + 0x0002) +#define DPRAM_PDA2PHONE_RAW_BUFFER_ADDRESS (DPRAM_PDA2PHONE_RAW_START_ADDRESS + 0x0004) + +#define DPRAM_PHONE2PDA_FORMATTED_START_ADDRESS (DPRAM_PDA2PHONE_RAW_START_ADDRESS + DPRAM_PDA2PHONE_RAW_BUFFER_SIZE + 4) +#define DPRAM_PHONE2PDA_FORMATTED_HEAD_ADDRESS (DPRAM_PHONE2PDA_FORMATTED_START_ADDRESS) +#define DPRAM_PHONE2PDA_FORMATTED_TAIL_ADDRESS (DPRAM_PHONE2PDA_FORMATTED_START_ADDRESS + 0x0002) +#define DPRAM_PHONE2PDA_FORMATTED_BUFFER_ADDRESS (DPRAM_PHONE2PDA_FORMATTED_START_ADDRESS + 0x0004) + +#define DPRAM_PHONE2PDA_RAW_START_ADDRESS (DPRAM_PHONE2PDA_FORMATTED_START_ADDRESS + (DPRAM_PHONE2PDA_FORMATTED_BUFFER_SIZE + 4)) +#define DPRAM_PHONE2PDA_RAW_HEAD_ADDRESS (DPRAM_PHONE2PDA_RAW_START_ADDRESS) +#define DPRAM_PHONE2PDA_RAW_TAIL_ADDRESS (DPRAM_PHONE2PDA_RAW_START_ADDRESS + 0x0002) +#define DPRAM_PHONE2PDA_RAW_BUFFER_ADDRESS (DPRAM_PHONE2PDA_RAW_START_ADDRESS + 0x0004) + +#if defined(DPRAM_SIZE_16KB) +#define DPRAM_PDA2PHONE_INTERRUPT_ADDRESS 0x3FFC +#define DPRAM_PHONE2PDA_INTERRUPT_ADDRESS 0x3FFE +#elif defined(DPRAM_SIZE_32KB) +#define DPRAM_PDA2PHONE_INTERRUPT_ADDRESS 0x7FFC +#define DPRAM_PHONE2PDA_INTERRUPT_ADDRESS 0x7FFE +#else +#error "Feature is neither DPRAM_SIZE_16KB nor DPRAM_SIZE_32KB" +#endif + + +/* +** Logic Values +*/ +#define TRUE 1 +#define FALSE 0 + + +/* +** INTERRUPT MASKs +*/ +#define INT_MASK_VALID 0x0080 +#define INT_MASK_COMMAND 0x0040 +#define INT_MASK_REQ_ACK_F 0x0020 +#define INT_MASK_REQ_ACK_R 0x0010 +#define INT_MASK_RES_ACK_F 0x0008 +#define INT_MASK_RES_ACK_R 0x0004 +#define INT_MASK_SEND_F 0x0002 +#define INT_MASK_SEND_R 0x0001 + +/* +** INTERRUPT COMMANDs +*/ +#define MBX_CMD_INIT_START 0x0001 +#define MBX_CMD_INIT_END 0x0002 +#define MBX_CMD_REQ_ACTIVE 0x0003 +#define MBX_CMD_RES_ACTIVE 0x0004 +#define MBX_CMD_REQ_TIME_SYNC 0x0005 +#define MBX_CMD_PHONE_RESET 0x0007 +#define MBX_CMD_PHONE_START 0x0008 +#define MBX_CMD_PHONE_COMMON_BOOT 0x0108 +#define MBX_CMD_ERR_DISPLAY 0x0009 +#define MBX_CMD_PHONE_DEEP_SLEEP 0x000A + +#define MBX_CMD_DPRAM_DOWN 0x000B // DPRAM_DOWN Interrupt from Modem 0xCB +#define MBX_CMD_PDA_WAKEUP 0x000C // PDA Wake up Interrupt to Modem 0xCC +#define MBX_CMD_PDA_SLEEP 0x000D // PDA Sleep Interrupt to Modem 0xCD +#define MBX_CMD_CP_WAKEUP_START 0x000E // CP Send ack CE to PDA + +#define MBX_CMD_CDMA_DEAD 0xAB09 + +#define INT_COMMAND(x) (INT_MASK_VALID | INT_MASK_COMMAND | x) +#define INT_NON_COMMAND(x) (INT_MASK_VALID | x) + +/* special interrupt cmd indicating modem boot failure. */ +#define INT_POWERSAFE_FAIL 0xDEAD + +#define FORMATTED_INDEX 0 +#define RAW_INDEX 1 +#define MAX_INDEX 2 + + +/* +** IOCTL COMMANDs +*/ +#define IOC_MZ_MAGIC ('o') +#define DPRAM_PHONE_POWON _IO(IOC_MZ_MAGIC, 0xD0) +#define DPRAM_PHONEIMG_LOAD _IO(IOC_MZ_MAGIC, 0xD1) +#define DPRAM_NVDATA_LOAD _IO(IOC_MZ_MAGIC, 0xD2) +#define DPRAM_PHONE_BOOTSTART _IO(IOC_MZ_MAGIC, 0xD3) +#define DPRAM_PHONE_BOOTTYPE _IOW(IOC_MZ_MAGIC,0xD5, unsigned int) +//#define DPRAM_PHONE_OFF _IO(IOC_MZ_MAGIC,0xD6) +#define IOCTL_ONEDRAM_WAKEUP _IOW(IOC_MZ_MAGIC,0xD7, unsigned int) +//#define DPRAM_PHONE_RESET _IO(IOC_MZ_MAGIC,0xD8) +#define DPRAM_PHONE_RAM_DUMP _IO(IOC_MZ_MAGIC,0xD9) + +#define IOCTL_SET_FATAL_OPERATION _IOW(IOC_MZ_MAGIC,0xDA, unsigned int) + +#define IOC_SEC_MAGIC (0xF0) +#define DPRAM_PHONE_ON _IO(IOC_SEC_MAGIC, 0xC0) +#define DPRAM_PHONE_OFF _IO(IOC_SEC_MAGIC, 0xC1) +#define DPRAM_PHONE_GETSTATUS _IOR(IOC_SEC_MAGIC, 0xC2, unsigned int) +//#define DPRAM_PHONE_MDUMP _IO(IOC_SEC_MAGIC, 0xC3) +//#define DPRAM_PHONE_BATTERY _IO(IOC_SEC_MAGIC, 0xC4) +#define DPRAM_PHONE_RESET _IO(IOC_SEC_MAGIC, 0xC5) +#define DPRAM_PHONE_RAMDUMP_ON _IO(IOC_SEC_MAGIC, 0xC6) +#define DPRAM_PHONE_RAMDUMP_OFF _IO(IOC_SEC_MAGIC, 0xC7) +#define DPRAM_EXTRA_MEM_RW _IOWR(IOC_SEC_MAGIC, 0xC8, unsigned long) + +#define DPRAM_PHONE_UNSET_UPLOAD _IO(IOC_SEC_MAGIC, 0xCA) +#define DPRAM_PHONE_SET_AUTOTEST _IO(IOC_SEC_MAGIC, 0xCB) +#define DPRAM_PHONE_SET_DEBUGLEVEL _IO(IOC_SEC_MAGIC, 0xCC) +#define DPRAM_PHONE_GET_DEBUGLEVEL _IO(IOC_SEC_MAGIC, 0xCD) + +#define DPRAM_PHONE_CPRAMDUMP_START _IO(IOC_SEC_MAGIC, 0xCE) +#define DPRAM_PHONE_CPRAMDUMP_DONE _IO(IOC_SEC_MAGIC, 0xCF) + +#define CP_RESET_CODE 0xCDABCDAB + +/* + * COMMON BOOT DEFINITIONs + */ +#define CP_CHIPSET_QUALCOMM 0x100 +#define CP_CHIPSET_INFINEON 0x200 +#define CP_CHIPSET_BROADCOM 0x300 +#define AP_PLATFORM_ANDROID 0x100 +#define AP_PLATFORM_LINUX 0x300 +#define CP_ONLINE_BOOT 0x0000 +#define CP_AIRPLANE_BOOT 0x1000 + +/* + * BOOT MAGIC KEY + */ +#define DPRAM_BOOT_NORMAL (('T'<<24) | ('B'<<16) | ('M'<<8) | 'N') + + +#ifdef CDMA_IPC_C210_IDPRAM +#define DPRAM_VBASE idpram_base + +/* +** S5PC11x DPRAM REGISTER MAP +*/ +#ifndef IDPRAM_PHYSICAL_ADDR +#define IDPRAM_PHYSICAL_ADDR S5P_PA_MODEMIF +#endif +#define IDPRAM_START_ADDR ((volatile void __iomem *)idpram_base) +#define IDPRAM_SIZE 0x4000 + +#define IDPRAM_AP2MSM_INT_OFFSET 0x3FFC +#define IDPRAM_MSM2AP_INT_OFFSET 0x3FFE + +#define IDPRAM_SFR_PHYSICAL_ADDR (IDPRAM_PHYSICAL_ADDR + 0x8000) +#define IDPRAM_SFR_START_ADDR ((volatile void __iomem *)idpram_sfr_base) +#define IDPRAM_SFR_INT2AP (IDPRAM_SFR_START_ADDR) +#define IDPRAM_SFR_INT2MSM (IDPRAM_SFR_START_ADDR + 0x4) +#define IDPRAM_SFR_MIFCON (IDPRAM_SFR_START_ADDR + 0x8) +#define IDPRAM_SFR_MIFPCON (IDPRAM_SFR_START_ADDR + 0xC) +#define IDPRAM_SFR_MSMINTCLR (IDPRAM_SFR_START_ADDR + 0x10) +#define IDPRAM_SFR_DMA_TX_ADR (IDPRAM_SFR_START_ADDR + 0x14) +#define IDPRAM_SFR_DMA_RX_ADR (IDPRAM_SFR_START_ADDR + 0x18) +#define IDPRAM_SFR_SIZE 0x1C + +// It is recommended that S5PC110 write data with half-word access on the interrupt port because +// S5PC100 overwrites tha data in INT2AP if there are INT2AP and INT2MSM sharing the same word +#define IDPRAM_INT2MSM_MASK 0xFF + +#define IDPRAM_MIFCON_INT2APEN (1<<2) +#define IDPRAM_MIFCON_INT2MSMEN (1<<3) +#define IDPRAM_MIFCON_DMATXREQEN_0 (1<<16) +#define IDPRAM_MIFCON_DMATXREQEN_1 (1<<17) +#define IDPRAM_MIFCON_DMARXREQEN_0 (1<<18) +#define IDPRAM_MIFCON_DMARXREQEN_1 (1<<19) +#define IDPRAM_MIFCON_FIXBIT (1<<20) + +#define IDPRAM_MIFPCON_ADM_MODE (1<<6) // mux / demux mode + +#define IDPRAM_DMA_ADR_MASK 0x3FFF +#define IDPRAM_DMA_TX_ADR_0 // shift 0 +#define IDPRAM_DMA_TX_ADR_1 // shift 16 +#define IDPRAM_DMA_RX_ADR_0 // shift 0 +#define IDPRAM_DMA_RX_ADR_1 // shift 16 + +#define IDPRAM_INT_CLEAR() idpram_sfr_base->msmintclr = 0xFF + +typedef struct { + unsigned int int2ap; + unsigned int int2msm; + unsigned int mifcon; + unsigned int mifpcon; + unsigned int msmintclr; + unsigned int dma_tx_adr; + unsigned int dma_rx_adr; +} IDPRAM_SFR; +#endif + +/* +** DEVICE DEFINITIONs +*/ +#define DRIVER_NAME "DPRAM" +#define DRIVER_PROC_ENTRY "driver/dpram" +#define DRIVER_MAJOR_NUM 249 +#define DPRAM_DUMP_DEV_MAJOR 250 + +/* +** MULTI PDP DEFINITIONs +*/ +#define APP_DEVNAME "multipdp" /* Device node name for application interface */ +#define NUM_PDP_CONTEXT 3 /* number of PDP context */ +/* Device types */ +#define DEV_TYPE_NET 0 /* network device for IP data */ +#define DEV_TYPE_SERIAL 1 /* serial device for CSD */ +#define CSD_MAJOR_NUM 248 /* Device major number */ +#define CSD_MINOR_NUM 0 /* Device minor number */ +#define MAX_PDP_CONTEXT 10 /* Maximum number of PDP context */ +#define MAX_PDP_DATA_LEN 1500 /* Maximum PDP data length */ +/* Device flags */ +#define DEV_FLAG_STICKY 0x1 /* Sticky */ +/* Maximum PDP packet length including header and start/stop bytes */ +#define MAX_PDP_PACKET_LEN (MAX_PDP_DATA_LEN + 4 + 2) + + +typedef struct pdp_arg { + unsigned char id; + char ifname[16]; +} __attribute__ ((packed)) pdp_arg_t; /* Multiple PDP */ + + +struct pdp_hdr { + u16 len; /* Data length */ + u8 id; /* Channel ID */ + u8 control; /* Control field */ +} __attribute__ ((packed)); /* PDP data packet header format */ + + +/* PDP information type */ +struct pdp_info { + u8 id; /* PDP context ID */ + unsigned type; /* Device type */ + unsigned flags; /* Device flags */ + u8 *tx_buf; /* Tx packet buffer */ + union { + struct { + struct tty_driver tty_driver[NUM_PDP_CONTEXT]; // CSD, CDMA, TRFB, CIQ + int refcount; + struct tty_struct *tty_table[1]; + struct ktermios *termios[1]; + struct ktermios *termios_locked[1]; + char tty_name[16]; + struct tty_struct *tty; + struct semaphore write_lock; + } vs_u; /* Virtual serial interface */ + } dev_u; /* App device interface */ +#define vn_dev dev_u.vnet_u +#define vs_dev dev_u.vs_u +}; + +/* +** DEBUG FEATUREs +*/ +#ifdef _DEBUG +#define _DEBUG_LOG +#define _ENABLE_ERROR_DEVICE +#endif + +#define DL_IPC 0x01<<10 +#define DL_WARN 0x01<<15 +#define DL_NOTICE 0x01<<20 +#define DL_INFO 0x01<<25 +#define DL_DEBUG 0x01<<30 + +#ifdef _DEBUG_LOG // debug printf +#define LOGE(s, args...) printk(KERN_ERR "IDPRAM/Err : <%s:%d> " s, __func__, __LINE__, ##args) // Error log +#define LOGA(s, args...) printk(KERN_INFO "IDPRAM : <%s:%d> " s, __func__, __LINE__, ##args) // Alway printed +#define LOG(s, args...) printk(KERN_INFO"IDPRAM : <%s:%d> " s, __func__, __LINE__, ##args) +#define LOGL(mask, s, args...) do{if(mask & __log_level__) printk("IDPRAM : <%s:%d> " s, __func__, __LINE__, ##args);}while(0) +#define PRINT_FUNC() printk(KERN_INFO "IDPRAM : %s() ...\n", __func__) +#else +#define LOGE(s, args...) printk("IDPRAM/Err : %s()| " s, __func__, ##args) // Error log +#define LOGA(s, args...) printk("IDPRAM : %s()| " s, __func__, ##args) // Alway printf +#define LOG(...) +#define LOGL(...) +#define PRINT_FUNC() +#endif + +#ifdef _ENABLE_ERROR_DEVICE +#define DPRAM_ERR_MSG_LEN 65 +#define DPRAM_ERR_DEVICE "dpramerr" +#define DPRAM_DUMP_DEVICE "dpram_dump" +#endif /* _ENABLE_ERROR_DEVICE */ + + +/* +** STRUCTURE DEFINITION +*/ +struct _param_em { + unsigned int offset; + unsigned char *addr; + unsigned int size; + int rw; +}; + +typedef struct dpram_serial { + struct tty_struct *tty; /* pointer to the tty for this device */ + int open_count; /* number of times this port has been opened */ + struct semaphore sem; /* locks this structure */ +} dpram_serial_t; + +typedef struct dpram_device { + /* DPRAM memory addresses */ + unsigned long in_head_addr; + unsigned long in_tail_addr; + unsigned long in_buff_addr; + unsigned long in_buff_size; + + unsigned long out_head_addr; + unsigned long out_tail_addr; + unsigned long out_buff_addr; + unsigned long out_buff_size; + + unsigned int in_head_saved; + unsigned int in_tail_saved; + unsigned int out_head_saved; + unsigned int out_tail_saved; + + u_int16_t mask_req_ack; + u_int16_t mask_res_ack; + u_int16_t mask_send; + + dpram_serial_t serial; +} dpram_device_t; + +typedef struct dpram_tasklet_data { + dpram_device_t *device; + u_int16_t non_cmd; +} dpram_tasklet_data_t; + +struct _mem_param { + unsigned short addr; + unsigned long data; + int dir; +}; + + +/* +** Add more definitions +*/ +#define GPIO_LEVEL_LOW 0 +#define GPIO_LEVEL_HIGH 1 + +#ifdef CDMA_IPC_C210_IDPRAM +#define IDPRAM_WPEND_LOCK (('l'<<24) | ('o'<<16) | ('c'<<8) | 'k') +#define IDPRAM_WPEND_UNLOCK (('u'<<24) | ('n'<<16) | ('l'<<8) | 'k') +#endif + +/* +** MACRO FUNCTIONs +*/ + +#endif /* __IDPRAM_H__ */ |