Files
2025-08-27 09:51:58 +01:00

100 lines
2.6 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 _HUGEIC_DEV_H_
#define _HUGEIC_DEV_H_
#ifdef __cplusplus
extern "C" {
#endif
struct dev_obj;
struct devobj_ops{
#ifdef CONFIG_SLEEP
int32 (*suspend)(struct dev_obj *obj);
int32 (*resume)(struct dev_obj *obj);
#endif
};
#ifndef OS_BLKLIST
#define OS_BLKLIST
struct os_blklist{
void *hdl;
};
#endif
struct dev_obj{
uint16 dev_id;
uint8 busy; /* device 被使用状态,由驱动代码设置。
有8bit可用,驱动代码根据 read/write/... 设置不同的bit位 */
uint8 suspend: 1, /* device进入suspend状态,由dev_suspend API设置 */
rev: 7;
struct dev_obj *next;
#ifdef CONFIG_SLEEP
struct os_blklist blklist;
#endif
const struct devobj_ops *ops;
};
#define DEV_BUSY(dev, val, set) dev_busy((struct dev_obj *)(dev), val, set)
#define DEV_SUSPENDED(dev, suspend) dev_suspended((struct dev_obj *)(dev), suspend)
#define HALDEV_SUSPENDED(dev) if(dev_suspended((struct dev_obj *)dev, 1)) return RET_ERR
/**
* dev core module initialize
* @return return RET_OK if initialize sucess, else return RET_ERR.
**/
extern int32 dev_init(void);
/**
* get dev by dev_id
* @param[in] dev_id device id
* @return return device object if device exist, else return NULL.
**/
extern struct dev_obj *dev_get(int32 dev_id);
/*
* set or clear device busy flag.
*/
extern void dev_busy(struct dev_obj *dev, uint8 busy, uint8 set);
/**
* register device into dev manager.
* @param[in] dev_id device id.
* @param[in] device object to register.
* @return return RET_OK if register sucess, else return RET_ERR.
**/
extern int32 dev_register(uint32 dev_id, struct dev_obj *device);
/**
* unregister device into dev manager.
* @param[in] device object to unregister.
* @return return RET_OK if register sucess, else return RET_ERR.
**/
extern int32 dev_unregister(struct dev_obj *device);
/* 检查指定的device是否已经被suspend,
参数suspend:表示如果device已经被suspend,是否suspend当前task
*/
int32 dev_suspended(struct dev_obj *dev, uint8 suspend);
/**
* device suspend when system enter sleep.
* @param[in] dsleep sleep or deep sleep.
* @return return RET_OK if unregister sucess, else return RET_ERR.
**/
extern int32 dev_suspend(uint16 type);
extern int32 dev_suspend_hook(struct dev_obj *dev, uint16 type);
/**
* device resume when system resume.
* @return return RET_OK if unregister sucess, else return RET_ERR.
**/
extern int32 dev_resume(uint16 type, uint32 wkreason);
extern int32 dev_resume_hook(struct dev_obj *dev, uint16 type, uint32 wkreason);
extern int32 pin_func(int32 dev_id, int32 request);
#ifdef __cplusplus
}
#endif
#endif