ea807d7d0b
Why I did it A demo driver base on this framework will display the sysfs node wich conform to the s3ip sysfs specification How I did it 1、 demo driver will call the s3ip kernel framework interface How to verify it run the demo ,it will display the sysfs node wich conform to the s3ip sysfs specification
176 lines
4.5 KiB
C
176 lines
4.5 KiB
C
/*
|
||
* sysled_device_driver.c
|
||
*
|
||
* This module realize /sys/s3ip/sysled attributes read and write functions
|
||
*
|
||
* History
|
||
* [Version] [Date] [Description]
|
||
* * v1.0 2021-08-31 S3IP sysfs
|
||
*/
|
||
|
||
#include <linux/slab.h>
|
||
|
||
#include "device_driver_common.h"
|
||
#include "sysled_sysfs.h"
|
||
|
||
#define SYSLED_INFO(fmt, args...) LOG_INFO("sysled: ", fmt, ##args)
|
||
#define SYSLED_ERR(fmt, args...) LOG_ERR("sysled: ", fmt, ##args)
|
||
#define SYSLED_DBG(fmt, args...) LOG_DBG("sysled: ", fmt, ##args)
|
||
|
||
static int g_loglevel = 0;
|
||
|
||
/*****************************************sysled**********************************************/
|
||
/*
|
||
* demo_get_sys_led_status - Used to get sys led status
|
||
* filled the value to buf, led status value define as below:
|
||
* 0: dark
|
||
* 1: green
|
||
* 2: yellow
|
||
* 3: red
|
||
* 4:blue
|
||
* 5: green light flashing
|
||
* 6: yellow light flashing
|
||
* 7: red light flashing
|
||
* 8:blue light flashing
|
||
*
|
||
* @buf: Data receiving buffer
|
||
* @count: length of buf
|
||
*
|
||
* This function returns the length of the filled buffer,
|
||
* if not support this attributes filled "NA" to buf,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static ssize_t demo_get_sys_led_status(char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_set_sys_led_status - Used to set sys led status
|
||
* @status: led status, led status value define as below:
|
||
* 0: dark
|
||
* 1: green
|
||
* 2: yellow
|
||
* 3: red
|
||
* 4:blue
|
||
* 5: green light flashing
|
||
* 6: yellow light flashing
|
||
* 7: red light flashing
|
||
* 8:blue light flashing
|
||
*
|
||
* This function returns 0 on success,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static int demo_set_sys_led_status(int status)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/* Similar to demo_get_sys_led_status */
|
||
static ssize_t demo_get_bmc_led_status(char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/* Similar to demo_set_sys_led_status */
|
||
static int demo_set_bmc_led_status(int status)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/* Similar to demo_get_sys_led_status */
|
||
static ssize_t demo_get_sys_fan_led_status(char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/* Similar to demo_set_sys_led_status */
|
||
static int demo_set_sys_fan_led_status(int status)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/* Similar to demo_get_sys_led_status */
|
||
static ssize_t demo_get_sys_psu_led_status(char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/* Similar to demo_set_sys_led_status */
|
||
static int demo_set_sys_psu_led_status(int status)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/* Similar to demo_get_sys_led_status */
|
||
static ssize_t demo_get_id_led_status(char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/* Similar to demo_set_sys_led_status */
|
||
static int demo_set_id_led_status(int status)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/**************************************end of sysled******************************************/
|
||
|
||
static struct s3ip_sysfs_sysled_drivers_s drivers = {
|
||
/*
|
||
* set ODM sysled drivers to /sys/s3ip/sysled,
|
||
* if not support the function, set corresponding hook to NULL.
|
||
*/
|
||
.get_sys_led_status = demo_get_sys_led_status,
|
||
.set_sys_led_status = demo_set_sys_led_status,
|
||
.get_bmc_led_status = demo_get_bmc_led_status,
|
||
.set_bmc_led_status = demo_set_bmc_led_status,
|
||
.get_sys_fan_led_status = demo_get_sys_fan_led_status,
|
||
.set_sys_fan_led_status = demo_set_sys_fan_led_status,
|
||
.get_sys_psu_led_status = demo_get_sys_psu_led_status,
|
||
.set_sys_psu_led_status = demo_set_sys_psu_led_status,
|
||
.get_id_led_status = demo_get_id_led_status,
|
||
.set_id_led_status = demo_set_id_led_status,
|
||
};
|
||
|
||
static int __init sysled_init(void)
|
||
{
|
||
int ret;
|
||
|
||
SYSLED_INFO("sysled_init...\n");
|
||
|
||
ret = s3ip_sysfs_sysled_drivers_register(&drivers);
|
||
if (ret < 0) {
|
||
SYSLED_ERR("sysled drivers register err, ret %d.\n", ret);
|
||
return ret;
|
||
}
|
||
|
||
SYSLED_INFO("sysled create success.\n");
|
||
return 0;
|
||
}
|
||
|
||
static void __exit sysled_exit(void)
|
||
{
|
||
s3ip_sysfs_sysled_drivers_unregister();
|
||
SYSLED_INFO("sysled_exit ok.\n");
|
||
return;
|
||
}
|
||
|
||
module_init(sysled_init);
|
||
module_exit(sysled_exit);
|
||
module_param(g_loglevel, int, 0644);
|
||
MODULE_PARM_DESC(g_loglevel, "the log level(info=0x1, err=0x2, dbg=0x4, all=0xf).\n");
|
||
MODULE_LICENSE("GPL");
|
||
MODULE_AUTHOR("sonic S3IP sysfs");
|
||
MODULE_DESCRIPTION("sysled device driver");
|