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
919 lines
28 KiB
C
919 lines
28 KiB
C
/*
|
||
* slot_device_driver.c
|
||
*
|
||
* This module realize /sys/s3ip/slot 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 "slot_sysfs.h"
|
||
|
||
#define SLOT_INFO(fmt, args...) LOG_INFO("slot: ", fmt, ##args)
|
||
#define SLOT_ERR(fmt, args...) LOG_ERR("slot: ", fmt, ##args)
|
||
#define SLOT_DBG(fmt, args...) LOG_DBG("slot: ", fmt, ##args)
|
||
|
||
static int g_loglevel = 0;
|
||
|
||
/******************************************slot***********************************************/
|
||
static int demo_get_slot_number(void)
|
||
{
|
||
/* add vendor codes here */
|
||
return 1;
|
||
}
|
||
|
||
static int demo_get_slot_temp_number(unsigned int slot_index)
|
||
{
|
||
/* add vendor codes here */
|
||
return 1;
|
||
}
|
||
|
||
static int demo_get_slot_vol_number(unsigned int slot_index)
|
||
{
|
||
/* add vendor codes here */
|
||
return 1;
|
||
}
|
||
|
||
static int demo_get_slot_curr_number(unsigned int slot_index)
|
||
{
|
||
/* add vendor codes here */
|
||
return 1;
|
||
}
|
||
|
||
static int demo_get_slot_fpga_number(unsigned int slot_index)
|
||
{
|
||
/* add vendor codes here */
|
||
return 1;
|
||
}
|
||
|
||
static int demo_get_slot_cpld_number(unsigned int slot_index)
|
||
{
|
||
/* add vendor codes here */
|
||
return 1;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_model_name - Used to get slot model name,
|
||
* @slot_index: start with 1
|
||
* @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_slot_model_name(unsigned int slot_index, char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_serial_number - Used to get slot serial number,
|
||
* @slot_index: start with 1
|
||
* @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_slot_serial_number(unsigned int slot_index, char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_part_number - Used to get slot part number,
|
||
* @slot_index: start with 1
|
||
* @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_slot_part_number(unsigned int slot_index, char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_hardware_version - Used to get slot hardware version,
|
||
* @slot_index: start with 1
|
||
* @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_slot_hardware_version(unsigned int slot_index, char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_status - Used to get slot status,
|
||
* filled the value to buf, slot status define as below:
|
||
* 0: ABSENT
|
||
* 1: OK
|
||
* 2: NOT OK
|
||
*
|
||
* @slot_index: start with 1
|
||
* @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_slot_status(unsigned int slot_index, char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_led_status - Used to get slot 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
|
||
*
|
||
* @slot_index: start with 1
|
||
* @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_slot_led_status(unsigned int slot_index, char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_set_slot_led_status - Used to set slot led status
|
||
* @slot_index: start with 1
|
||
* @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_slot_led_status(unsigned int slot_index, int status)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_temp_alias - Used to identify the location of the temperature sensor of slot,
|
||
* @slot_index: start with 1
|
||
* @temp_index: start with 1
|
||
* @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_slot_temp_alias(unsigned int slot_index, unsigned int temp_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_temp_type - Used to get the model of temperature sensor of slot,
|
||
* @slot_index: start with 1
|
||
* @temp_index: start with 1
|
||
* @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_slot_temp_type(unsigned int slot_index, unsigned int temp_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_temp_max - Used to get the maximum threshold of temperature sensor of slot,
|
||
* filled the value to buf, and the value keep three decimal places
|
||
* @slot_index: start with 1
|
||
* @temp_index: start with 1
|
||
* @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_slot_temp_max(unsigned int slot_index, unsigned int temp_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_set_slot_temp_max - Used to set the maximum threshold of temperature sensor of slot,
|
||
* get value from buf and set it to maximum threshold of slot temperature sensor
|
||
* @slot_index: start with 1
|
||
* @temp_index: start with 1
|
||
* @buf: the buf store the data to be set, eg '80.000'
|
||
* @count: length of buf
|
||
*
|
||
* This function returns 0 on success,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static int demo_set_slot_temp_max(unsigned int slot_index, unsigned int temp_index,
|
||
const char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_temp_min - Used to get the minimum threshold of temperature sensor of slot,
|
||
* filled the value to buf, and the value keep three decimal places
|
||
* @slot_index: start with 1
|
||
* @temp_index: start with 1
|
||
* @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_slot_temp_min(unsigned int slot_index, unsigned int temp_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_set_slot_temp_min - Used to set the minimum threshold of temperature sensor of slot,
|
||
* get value from buf and set it to minimum threshold of slot temperature sensor
|
||
* @slot_index: start with 1
|
||
* @temp_index: start with 1
|
||
* @buf: the buf store the data to be set, eg '50.000'
|
||
* @count: length of buf
|
||
*
|
||
* This function returns 0 on success,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static int demo_set_slot_temp_min(unsigned int slot_index, unsigned int temp_index,
|
||
const char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_temp_value - Used to get the input value of temperature sensor of slot,
|
||
* filled the value to buf, and the value keep three decimal places
|
||
* @slot_index: start with 1
|
||
* @temp_index: start with 1
|
||
* @buf: Data receiving buffer
|
||
* @count: length of buf
|
||
*
|
||
* This function returns the length of the filled buffer,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static ssize_t demo_get_slot_temp_value(unsigned int slot_index, unsigned int temp_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_vol_alias - Used to identify the location of the voltage sensor of slot,
|
||
* @slot_index: start with 1
|
||
* @vol_index: start with 1
|
||
* @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_slot_vol_alias(unsigned int slot_index, unsigned int vol_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_vol_type - Used to get the model of voltage sensor of slot,
|
||
* such as udc90160, tps53622 and so on
|
||
* @slot_index: start with 1
|
||
* @vol_index: start with 1
|
||
* @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_slot_vol_type(unsigned int slot_index, unsigned int vol_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_vol_max - Used to get the maximum threshold of voltage sensor of slot,
|
||
* filled the value to buf, and the value keep three decimal places
|
||
* @slot_index: start with 1
|
||
* @vol_index: start with 1
|
||
* @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_slot_vol_max(unsigned int slot_index, unsigned int vol_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_set_slot_vol_max - Used to set the maximum threshold of volatge sensor of slot,
|
||
* get value from buf and set it to maximum threshold of volatge sensor
|
||
* @slot_index: start with 1
|
||
* @vol_index: start with 1
|
||
* @buf: the buf store the data to be set, eg '3.567'
|
||
* @count: length of buf
|
||
*
|
||
* This function returns 0 on success,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static int demo_set_slot_vol_max(unsigned int slot_index, unsigned int vol_index,
|
||
const char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_vol_min - Used to get the minimum threshold of voltage sensor of slot,
|
||
* filled the value to buf, and the value keep three decimal places
|
||
* @slot_index: start with 1
|
||
* @vol_index: start with 1
|
||
* @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_slot_vol_min(unsigned int slot_index, unsigned int vol_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_set_slot_vol_min - Used to set the minimum threshold of voltage sensor of slot,
|
||
* get value from buf and set it to minimum threshold of voltage sensor
|
||
* @slot_index: start with 1
|
||
* @temp_index: start with 1
|
||
* @buf: the buf store the data to be set, eg '3.123'
|
||
* @count: length of buf
|
||
*
|
||
* This function returns 0 on success,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static int demo_set_slot_vol_min(unsigned int slot_index, unsigned int vol_index,
|
||
const char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_vol_range - Used to get the output error value of voltage sensor of slot,
|
||
* filled the value to buf
|
||
* @slot_index: start with 1
|
||
* @vol_index: start with 1
|
||
* @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_slot_vol_range(unsigned int slot_index, unsigned int vol_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_vol_nominal_value - Used to get the nominal value of voltage sensor of slot,
|
||
* filled the value to buf
|
||
* @slot_index: start with 1
|
||
* @vol_index: start with 1
|
||
* @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_slot_vol_nominal_value(unsigned int slot_index,
|
||
unsigned int vol_index, char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_vol_value - Used to get the input value of voltage sensor of slot,
|
||
* filled the value to buf, and the value keep three decimal places
|
||
* @slot_index: start with 1
|
||
* @vol_index: start with 1
|
||
* @buf: Data receiving buffer
|
||
* @count: length of buf
|
||
*
|
||
* This function returns the length of the filled buffer,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static ssize_t demo_get_slot_vol_value(unsigned int slot_index, unsigned int vol_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_curr_alias - Used to identify the location of the current sensor of slot,
|
||
* @slot_index: start with 1
|
||
* @curr_index: start with 1
|
||
* @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_slot_curr_alias(unsigned int slot_index, unsigned int curr_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_curr_type - Used to get the model of current sensor of slot,
|
||
* @slot_index: start with 1
|
||
* @curr_index: start with 1
|
||
* @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_slot_curr_type(unsigned int slot_index, unsigned int curr_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_curr_max - Used to get the maximum threshold of current sensor of slot,
|
||
* filled the value to buf, and the value keep three decimal places
|
||
* @slot_index: start with 1
|
||
* @curr_index: start with 1
|
||
* @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_slot_curr_max(unsigned int slot_index, unsigned int curr_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_set_slot_curr_max - Used to set the maximum threshold of current sensor of slot,
|
||
* get value from buf and set it to maximum threshold of current sensor
|
||
* @slot_index: start with 1
|
||
* @curr_index: start with 1
|
||
* @buf: the buf store the data to be set
|
||
* @count: length of buf
|
||
*
|
||
* This function returns 0 on success,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static int demo_set_slot_curr_max(unsigned int slot_index, unsigned int curr_index,
|
||
const char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_curr_min - Used to get the minimum threshold of current sensor of slot,
|
||
* filled the value to buf, and the value keep three decimal places
|
||
* @slot_index: start with 1
|
||
* @curr_index: start with 1
|
||
* @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_slot_curr_min(unsigned int slot_index, unsigned int curr_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_set_slot_curr_min - Used to set the minimum threshold of current sensor of slot,
|
||
* get value from buf and set it to minimum threshold of current sensor
|
||
* @slot_index: start with 1
|
||
* @curr_index: start with 1
|
||
* @buf: the buf store the data to be set, eg '50.000'
|
||
* @count: length of buf
|
||
*
|
||
* This function returns 0 on success,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static int demo_set_slot_curr_min(unsigned int slot_index, unsigned int curr_index,
|
||
const char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_curr_value - Used to get the input value of current sensor of slot,
|
||
* filled the value to buf, and the value keep three decimal places
|
||
* @slot_index: start with 1
|
||
* @curr_index: start with 1
|
||
* @buf: Data receiving buffer
|
||
* @count: length of buf
|
||
*
|
||
* This function returns the length of the filled buffer,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static ssize_t demo_get_slot_curr_value(unsigned int slot_index, unsigned int curr_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_fpga_alias - Used to identify the location of slot fpga,
|
||
* @slot_index: start with 1
|
||
* @fpga_index: start with 1
|
||
* @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_slot_fpga_alias(unsigned int slot_index, unsigned int fpga_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_fpga_type - Used to get slot fpga model name
|
||
* @slot_index: start with 1
|
||
* @fpga_index: start with 1
|
||
* @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_slot_fpga_type(unsigned int slot_index, unsigned int fpga_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_fpga_firmware_version - Used to get slot fpga firmware version,
|
||
* @slot_index: start with 1
|
||
* @fpga_index: start with 1
|
||
* @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_slot_fpga_firmware_version(unsigned int slot_index, unsigned int fpga_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_fpga_board_version - Used to get slot fpga board version,
|
||
* @slot_index: start with 1
|
||
* @fpga_index: start with 1
|
||
* @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_slot_fpga_board_version(unsigned int slot_index, unsigned int fpga_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_fpga_test_reg - Used to test slot fpga register read
|
||
* filled the value to buf, value is hexadecimal, start with 0x
|
||
* @slot_index: start with 1
|
||
* @fpga_index: start with 1
|
||
* @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_slot_fpga_test_reg(unsigned int slot_index, unsigned int fpga_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_set_slot_fpga_test_reg - Used to test slot fpga register write
|
||
* @slot_index: start with 1
|
||
* @fpga_index: start with 1
|
||
* @value: value write to slot fpga
|
||
*
|
||
* This function returns 0 on success,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static int demo_set_slot_fpga_test_reg(unsigned int slot_index, unsigned int fpga_index,
|
||
unsigned int value)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_cpld_alias - Used to identify the location of slot cpld,
|
||
* @slot_index: start with 1
|
||
* @cpld_index: start with 1
|
||
* @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_slot_cpld_alias(unsigned int slot_index, unsigned int cpld_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_cpld_type - Used to get slot cpld model name
|
||
* @slot_index: start with 1
|
||
* @cpld_index: start with 1
|
||
* @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_slot_cpld_type(unsigned int slot_index, unsigned int cpld_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_cpld_firmware_version - Used to get slot cpld firmware version,
|
||
* @slot_index: start with 1
|
||
* @cpld_index: start with 1
|
||
* @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_slot_cpld_firmware_version(unsigned int slot_index, unsigned int cpld_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_cpld_board_version - Used to get slot cpld board version,
|
||
* @slot_index: start with 1
|
||
* @cpld_index: start with 1
|
||
* @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_slot_cpld_board_version(unsigned int slot_index, unsigned int cpld_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_get_slot_cpld_test_reg - Used to test slot cpld register read
|
||
* filled the value to buf, value is hexadecimal, start with 0x
|
||
* @slot_index: start with 1
|
||
* @cpld_index: start with 1
|
||
* @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_slot_cpld_test_reg(unsigned int slot_index, unsigned int cpld_index,
|
||
char *buf, size_t count)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
|
||
/*
|
||
* demo_set_slot_cpld_test_reg - Used to test slot cpld register write
|
||
* @slot_index: start with 1
|
||
* @cpld_index: start with 1
|
||
* @value: value write to slot cpld
|
||
*
|
||
* This function returns 0 on success,
|
||
* otherwise it returns a negative value on failed.
|
||
*/
|
||
static int demo_set_slot_cpld_test_reg(unsigned int slot_index, unsigned int cpld_index,
|
||
unsigned int value)
|
||
{
|
||
/* add vendor codes here */
|
||
return -ENOSYS;
|
||
}
|
||
/***************************************end of slot*******************************************/
|
||
|
||
static struct s3ip_sysfs_slot_drivers_s drivers = {
|
||
/*
|
||
* set ODM slot drivers to /sys/s3ip/slot,
|
||
* if not support the function, set corresponding hook to NULL.
|
||
*/
|
||
.get_slot_number = demo_get_slot_number,
|
||
.get_slot_temp_number = demo_get_slot_temp_number,
|
||
.get_slot_vol_number = demo_get_slot_vol_number,
|
||
.get_slot_curr_number = demo_get_slot_curr_number,
|
||
.get_slot_cpld_number = demo_get_slot_cpld_number,
|
||
.get_slot_fpga_number = demo_get_slot_fpga_number,
|
||
.get_slot_model_name = demo_get_slot_model_name,
|
||
.get_slot_serial_number = demo_get_slot_serial_number,
|
||
.get_slot_part_number = demo_get_slot_part_number,
|
||
.get_slot_hardware_version = demo_get_slot_hardware_version,
|
||
.get_slot_status = demo_get_slot_status,
|
||
.get_slot_led_status = demo_get_slot_led_status,
|
||
.set_slot_led_status = demo_set_slot_led_status,
|
||
.get_slot_temp_alias = demo_get_slot_temp_alias,
|
||
.get_slot_temp_type = demo_get_slot_temp_type,
|
||
.get_slot_temp_max = demo_get_slot_temp_max,
|
||
.set_slot_temp_max = demo_set_slot_temp_max,
|
||
.get_slot_temp_min = demo_get_slot_temp_min,
|
||
.set_slot_temp_min = demo_set_slot_temp_min,
|
||
.get_slot_temp_value = demo_get_slot_temp_value,
|
||
.get_slot_vol_alias = demo_get_slot_vol_alias,
|
||
.get_slot_vol_type = demo_get_slot_vol_type,
|
||
.get_slot_vol_max = demo_get_slot_vol_max,
|
||
.set_slot_vol_max = demo_set_slot_vol_max,
|
||
.get_slot_vol_min = demo_get_slot_vol_min,
|
||
.set_slot_vol_min = demo_set_slot_vol_min,
|
||
.get_slot_vol_range = demo_get_slot_vol_range,
|
||
.get_slot_vol_nominal_value = demo_get_slot_vol_nominal_value,
|
||
.get_slot_vol_value = demo_get_slot_vol_value,
|
||
.get_slot_curr_alias = demo_get_slot_curr_alias,
|
||
.get_slot_curr_type = demo_get_slot_curr_type,
|
||
.get_slot_curr_max = demo_get_slot_curr_max,
|
||
.set_slot_curr_max = demo_set_slot_curr_max,
|
||
.get_slot_curr_min = demo_get_slot_curr_min,
|
||
.set_slot_curr_min = demo_set_slot_curr_min,
|
||
.get_slot_curr_value = demo_get_slot_curr_value,
|
||
.get_slot_fpga_alias = demo_get_slot_fpga_alias,
|
||
.get_slot_fpga_alias = demo_get_slot_fpga_alias,
|
||
.get_slot_fpga_type = demo_get_slot_fpga_type,
|
||
.get_slot_fpga_firmware_version = demo_get_slot_fpga_firmware_version,
|
||
.get_slot_fpga_board_version = demo_get_slot_fpga_board_version,
|
||
.get_slot_fpga_test_reg = demo_get_slot_fpga_test_reg,
|
||
.set_slot_fpga_test_reg = demo_set_slot_fpga_test_reg,
|
||
.get_slot_cpld_alias = demo_get_slot_cpld_alias,
|
||
.get_slot_cpld_type = demo_get_slot_cpld_type,
|
||
.get_slot_cpld_firmware_version = demo_get_slot_cpld_firmware_version,
|
||
.get_slot_cpld_board_version = demo_get_slot_cpld_board_version,
|
||
.get_slot_cpld_test_reg = demo_get_slot_cpld_test_reg,
|
||
.set_slot_cpld_test_reg = demo_set_slot_cpld_test_reg,
|
||
};
|
||
|
||
static int __init slot_dev_drv_init(void)
|
||
{
|
||
int ret;
|
||
|
||
SLOT_INFO("slot_init...\n");
|
||
|
||
ret = s3ip_sysfs_slot_drivers_register(&drivers);
|
||
if (ret < 0) {
|
||
SLOT_ERR("slot drivers register err, ret %d.\n", ret);
|
||
return ret;
|
||
}
|
||
SLOT_INFO("slot_init success.\n");
|
||
return 0;
|
||
}
|
||
|
||
static void __exit slot_dev_drv_exit(void)
|
||
{
|
||
s3ip_sysfs_slot_drivers_unregister();
|
||
SLOT_INFO("slot_exit success.\n");
|
||
return;
|
||
}
|
||
|
||
module_init(slot_dev_drv_init);
|
||
module_exit(slot_dev_drv_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("slot device driver");
|