Files
TAIXIN/sdk/include/hal/crc.h

73 lines
1.7 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _HAL_CRC_H_
#define _HAL_CRC_H_
#ifdef __cplusplus
extern "C" {
#endif
enum CRC_DEV_FLAGS {
CRC_DEV_FLAGS_CONTINUE_CALC = BIT(0),
};
enum CRC_DEV_TYPE {
CRC_TYPE_CRC5_USB = 0,
CRC_TYPE_CRC7_MMC,
CRC_TYPE_CRC8_MAXIM,
CRC_TYPE_CRC8,
CRC_TYPE_CRC16,
CRC_TYPE_CRC16_CCITT,
CRC_TYPE_CRC16_MODBUS,
CRC_TYPE_CRC32_WINRAR,
CRC_TYPE_TCPIP_CHKSUM,
CRC_TYPE_MAX,
};
/**
* CRC len 512KB for TXW81x 64KB for TXW80x
*/
struct crc_dev_req {
uint16 type : 8,
flag : 8;
uint16 cookie;
uint8 *data;
uint32 len;
uint32 crc_last; //use when CRC_DEV_FLAGS_CONTINUE_CALC
};
struct crc_dev {
struct dev_obj dev;
};
struct crc_hal_ops{
struct devobj_ops ops;
int32(*calc)(struct crc_dev *dev, struct crc_dev_req *req, uint32 *crc_val, uint32 flags);
};
/**
* @brief Hold CRC .
* @param dev : crc_dev use @ref dev_get() function to get the handle.
* @param req : req(type\addr\len) for crc dev.
* 1、req crc_last must set when flags:CRC_DEV_FLAGS_CONTINUE_CALC
* @param crc_val : crc result.
* @param flags : CRC_DEV_FLAGS .
* @return
* - RET_OK : Successfully.
* - RET_ERR : Failed.
* @note
*/
static inline int32 crc_dev_calc(struct crc_dev *dev, struct crc_dev_req *req, uint32 *crc_val, uint32 flags)
{
const struct crc_hal_ops *ops = (const struct crc_hal_ops *)dev->dev.ops;
return (dev && ops->calc) ? ops->calc(dev, req, crc_val, flags) : RET_ERR;
}
extern uint32 hw_crc(enum CRC_DEV_TYPE type, uint8 *data, uint32 len);
extern uint32 hw_crc_no_cache(enum CRC_DEV_TYPE type, uint8 *data, uint32 len);
#ifdef __cplusplus
}
#endif
#endif