00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00034
00035
00036 #include <linux/module.h>
00037 #include <linux/jiffies.h>
00038 #include <linux/slab.h>
00039
00040 #include "reg_request.h"
00041
00042
00043
00048 int ec_reg_request_init(
00049 ec_reg_request_t *reg,
00050 size_t size
00051 )
00052 {
00053 if (!(reg->data = (uint8_t *) kmalloc(size, GFP_KERNEL))) {
00054 EC_ERR("Failed to allocate %zu bytes of register memory.\n", size);
00055 return -ENOMEM;
00056 }
00057
00058 INIT_LIST_HEAD(®->list);
00059 reg->mem_size = size;
00060 memset(reg->data, 0x00, size);
00061 reg->dir = EC_DIR_INVALID;
00062 reg->address = 0;
00063 reg->transfer_size = 0;
00064 reg->state = EC_INT_REQUEST_INIT;
00065 reg->ring_position = 0;
00066 return 0;
00067 }
00068
00069
00070
00073 void ec_reg_request_clear(
00074 ec_reg_request_t *reg
00075 )
00076 {
00077 if (reg->data) {
00078 kfree(reg->data);
00079 }
00080 }
00081
00082
00083
00084
00085
00086 uint8_t *ecrt_reg_request_data(ec_reg_request_t *reg)
00087 {
00088 return reg->data;
00089 }
00090
00091
00092
00093 ec_request_state_t ecrt_reg_request_state(const ec_reg_request_t *reg)
00094 {
00095 return ec_request_state_translation_table[reg->state];
00096 }
00097
00098
00099
00100 void ecrt_reg_request_write(ec_reg_request_t *reg, uint16_t address,
00101 size_t size)
00102 {
00103 reg->dir = EC_DIR_OUTPUT;
00104 reg->address = address;
00105 reg->transfer_size = min(size, reg->mem_size);
00106 reg->state = EC_INT_REQUEST_QUEUED;
00107 }
00108
00109
00110
00111 void ecrt_reg_request_read(ec_reg_request_t *reg, uint16_t address,
00112 size_t size)
00113 {
00114 reg->dir = EC_DIR_INPUT;
00115 reg->address = address;
00116 reg->transfer_size = min(size, reg->mem_size);
00117 reg->state = EC_INT_REQUEST_QUEUED;
00118 }
00119
00120
00121
00124 EXPORT_SYMBOL(ecrt_reg_request_data);
00125 EXPORT_SYMBOL(ecrt_reg_request_state);
00126 EXPORT_SYMBOL(ecrt_reg_request_write);
00127 EXPORT_SYMBOL(ecrt_reg_request_read);
00128
00131