2019-01-29 12:38:18 +03:00
/* SPDX-License-Identifier: GPL-2.0 */
2017-05-16 18:46:48 +03:00
/*
2019-01-29 12:38:18 +03:00
* LPC variant I / O for Microchip EC
2017-05-16 18:46:48 +03:00
*
* Copyright ( C ) 2016 Google , Inc
*/
2018-07-18 19:09:55 +03:00
# ifndef __CROS_EC_LPC_MEC_H
# define __CROS_EC_LPC_MEC_H
2017-05-16 18:46:48 +03:00
enum cros_ec_lpc_mec_emi_access_mode {
/* 8-bit access */
ACCESS_TYPE_BYTE = 0x0 ,
/* 16-bit access */
ACCESS_TYPE_WORD = 0x1 ,
/* 32-bit access */
ACCESS_TYPE_LONG = 0x2 ,
/*
* 32 - bit access , read or write of MEC_EMI_EC_DATA_B3 causes the
* EC data register to be incremented .
*/
ACCESS_TYPE_LONG_AUTO_INCREMENT = 0x3 ,
} ;
enum cros_ec_lpc_mec_io_type {
MEC_IO_READ ,
MEC_IO_WRITE ,
} ;
/* EMI registers are relative to base */
2019-02-09 03:37:16 +03:00
# define MEC_EMI_HOST_TO_EC(MEC_EMI_BASE) ((MEC_EMI_BASE) + 0)
# define MEC_EMI_EC_TO_HOST(MEC_EMI_BASE) ((MEC_EMI_BASE) + 1)
# define MEC_EMI_EC_ADDRESS_B0(MEC_EMI_BASE) ((MEC_EMI_BASE) + 2)
# define MEC_EMI_EC_ADDRESS_B1(MEC_EMI_BASE) ((MEC_EMI_BASE) + 3)
# define MEC_EMI_EC_DATA_B0(MEC_EMI_BASE) ((MEC_EMI_BASE) + 4)
# define MEC_EMI_EC_DATA_B1(MEC_EMI_BASE) ((MEC_EMI_BASE) + 5)
# define MEC_EMI_EC_DATA_B2(MEC_EMI_BASE) ((MEC_EMI_BASE) + 6)
# define MEC_EMI_EC_DATA_B3(MEC_EMI_BASE) ((MEC_EMI_BASE) + 7)
2017-05-16 18:46:48 +03:00
2019-02-09 03:37:16 +03:00
/**
* cros_ec_lpc_mec_init ( ) - Initialize MEC I / O .
2017-05-16 18:46:48 +03:00
*
2019-02-09 03:37:16 +03:00
* @ base : MEC EMI Base address
* @ end : MEC EMI End address
2017-05-16 18:46:48 +03:00
*/
2019-02-09 03:37:16 +03:00
void cros_ec_lpc_mec_init ( unsigned int base , unsigned int end ) ;
2017-05-16 18:46:48 +03:00
/*
* cros_ec_lpc_mec_destroy
*
* Cleanup MEC I / O .
*/
void cros_ec_lpc_mec_destroy ( void ) ;
2019-02-09 03:37:16 +03:00
/**
* cros_ec_lpc_mec_in_range ( ) - Determine if addresses are in MEC EMI range .
*
* @ offset : Address offset
* @ length : Number of bytes to check
*
* Return : 1 if in range , 0 if not , and - EINVAL on failure
* such as the mec range not being initialized
*/
int cros_ec_lpc_mec_in_range ( unsigned int offset , unsigned int length ) ;
2017-05-16 18:46:48 +03:00
/**
* cros_ec_lpc_io_bytes_mec - Read / write bytes to MEC EMI port
*
* @ io_type : MEC_IO_READ or MEC_IO_WRITE , depending on request
* @ offset : Base read / write address
* @ length : Number of bytes to read / write
* @ buf : Destination / source buffer
*
* @ return 8 - bit checksum of all bytes read / written
*/
u8 cros_ec_lpc_io_bytes_mec ( enum cros_ec_lpc_mec_io_type io_type ,
unsigned int offset , unsigned int length , u8 * buf ) ;
2018-07-18 19:09:55 +03:00
# endif /* __CROS_EC_LPC_MEC_H */