Lines Matching refs:info

41 static int32_t TimerHi35xxEnable(struct TimerHi35xxInfo *info, bool enable)
43 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
44 uint32_t value = TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_CONTROL);
52 TimerHi35xxRegWrite(value, info->regBase + HI35XX_TIMERx_CONTROL);
53 TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_CONTROL);
58 static int32_t TimerHi35xxSetMode(struct TimerHi35xxInfo *info, uint16_t mode)
60 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
61 uint32_t value = TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_CONTROL);
70 TimerHi35xxRegWrite(value, info->regBase + HI35XX_TIMERx_CONTROL);
75 static int32_t TimerHi35xxSetPre(struct TimerHi35xxInfo *info, uint16_t pre)
77 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
78 uint32_t value = TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_CONTROL);
97 TimerHi35xxRegWrite(value, info->regBase + HI35XX_TIMERx_CONTROL);
98 TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_CONTROL);
103 static int32_t TimerHi35xxIntEnable(struct TimerHi35xxInfo *info, bool enable)
105 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
106 uint32_t value = TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_CONTROL);
114 TimerHi35xxRegWrite(value, info->regBase + HI35XX_TIMERx_CONTROL);
119 static int32_t TimerHi35xxIntClear(struct TimerHi35xxInfo *info)
121 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
122 TimerHi35xxRegWrite(0x0, info->regBase + HI35XX_TIMERx_INTCLR);
126 static int32_t TimerHi35xxTimerSize(struct TimerHi35xxInfo *info, bool is32Bit)
128 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
129 uint32_t value = TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_CONTROL);
137 TimerHi35xxRegWrite(value, info->regBase + HI35XX_TIMERx_CONTROL);
142 static int32_t TimerHi35xxTimerLoadSet(struct TimerHi35xxInfo *info, uint32_t value)
144 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
146 TimerHi35xxRegWrite(value, info->regBase + HI35XX_TIMERx_LOAD);
150 static void TimerHi35xxTimerGetAllReg(struct TimerHi35xxInfo *info)
152 TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_LOAD);
153 TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_VALUE);
154 TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_CONTROL);
155 TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_INTCLR);
156 TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_RIS);
157 TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_MIS);
158 TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_BGLOAD);
161 static void TimerDumperAddDatas(struct TimerHi35xxInfo *info)
164 {"HI35XX_TIMERx_LOAD", PLATFORM_DUMPER_REGISTERB, (void *)(info->regBase + HI35XX_TIMERx_LOAD)},
165 {"HI35XX_TIMERx_VALUE", PLATFORM_DUMPER_REGISTERB, (void *)(info->regBase + HI35XX_TIMERx_VALUE)},
166 {"HI35XX_TIMERx_CONTROL", PLATFORM_DUMPER_REGISTERB, (void *)(info->regBase + HI35XX_TIMERx_CONTROL)},
167 {"HI35XX_TIMERx_INTCLR", PLATFORM_DUMPER_REGISTERB, (void *)(info->regBase + HI35XX_TIMERx_INTCLR)},
168 {"HI35XX_TIMERx_RIS", PLATFORM_DUMPER_REGISTERB, (void *)(info->regBase + HI35XX_TIMERx_RIS)},
169 {"HI35XX_TIMERx_MIS", PLATFORM_DUMPER_REGISTERB, (void *)(info->regBase + HI35XX_TIMERx_MIS)},
170 {"HI35XX_TIMERx_BGLOAD", PLATFORM_DUMPER_REGISTERB, (void *)(info->regBase + HI35XX_TIMERx_BGLOAD)},
172 if (info->dumper == NULL) {
176 PlatformDumperAddDatas(info->dumper, datas, sizeof(datas) / sizeof(struct PlatformDumperData));
214 struct TimerHi35xxInfo *info = NULL;
215 info = (struct TimerHi35xxInfo *)data;
218 __func__, __TIME__, info->number, irqId);
221 TimerHi35xxIntClear(info);
223 CHECK_NULL_PTR_RETURN_VALUE(info->cb, HDF_ERR_INVALID_OBJECT);
224 info->cb(info->number);
225 HDF_LOGD("------------->%s: timer[%u], irqId [%u] process success", __func__, info->number, irqId);
235 cntrl->info.useconds = useconds;
236 cntrl->info.cb = cb;
237 cntrl->info.isPeriod = true;
239 struct TimerHi35xxInfo *info = cntrl->priv;
240 info->cb = cb;
241 info->isPeriod = true;
243 __func__, info->number, cntrl->info.useconds, cntrl->info.isPeriod);
245 if (TimerHi35xxSetMode(info, TIMERx_CONTROL_TIMERMODE_PERIOD) != HDF_SUCCESS) {
246 HDF_LOGE("%s: TimerHi35xxSetMode[%u] fail!", __func__, info->number);
258 cntrl->info.useconds = useconds;
259 cntrl->info.cb = cb;
260 cntrl->info.isPeriod = false;
262 struct TimerHi35xxInfo *info = cntrl->priv;
263 info->cb = cb;
264 info->isPeriod = false;
265 if (TimerHi35xxSetMode(info, TIMERx_CONTROL_TIMERMODE_ONESHOT) != HDF_SUCCESS) {
266 HDF_LOGE("%s: TimerHi35xxSetMode[%u] fail!", __func__, info->number);
280 if (cntrl->info.useconds == 0 || (cntrl->info.useconds / HI35XX_TIMERx_US_TRANS_S) > maxSeconds) {
283 value = (cntrl->info.useconds / HI35XX_TIMERx_US_TRANS_S) * HI35XX_TIMERx_CLOCK_HZ;
286 struct TimerHi35xxInfo *info = cntrl->priv;
287 OSAL_WRITEL(value, info->regBase + HI35XX_TIMERx_LOAD);
289 HDF_LOGD("%s: timer[%u] [%u][%u][%u] ", __func__, info->number, maxSeconds, value, cntrl->info.useconds);
294 static int32_t TimerHi35xxIrqRegister(struct TimerHi35xxInfo *info)
296 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
298 if (OsalRegisterIrq(info->irq, 0, TimerHi35xxIrqHandle, "timer_alarm", (void *)info) != HDF_SUCCESS) {
299 HDF_LOGE("%s: OsalRegisterIrq[%u][%u] fail!", __func__, info->irq, info->number);
302 info->isIrqReg = true;
306 static int32_t TimerHi35xxIrqUnregister(struct TimerHi35xxInfo *info)
308 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
310 (void)OsalUnregisterIrq(info->irq, (void *)info);
311 info->isIrqReg = false;
319 struct TimerHi35xxInfo *info = cntrl->priv;
321 int ret = TimerHi35xxIrqRegister(info);
328 ret = TimerHi35xxIntEnable(info, true);
340 ret = TimerHi35xxEnable(info, true);
345 TimerHi35xxTimerGetAllReg(info);
346 TimerDumperAddDatas(info);
347 PlatformDumperDump(info->dumper);
355 struct TimerHi35xxInfo *info = cntrl->priv;
356 int ret = TimerHi35xxEnable(info, false);
362 ret = TimerHi35xxIntEnable(info, false);
368 ret = TimerHi35xxIrqUnregister(info);
373 PlatformDumperDump(info->dumper);
394 struct TimerHi35xxInfo *info = cntrl->priv;
397 if (info->regBase != NULL) {
398 OsalIoUnmap((void *)info->regBase);
399 info->regBase = NULL;
401 PlatformDumperDestroy(info->dumper);
402 OsalMemFree(info->dumperName);
419 static int32_t TimerHi35xxInitRegSet(struct TimerHi35xxInfo *info)
421 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
423 TimerHi35xxEnable(info, false);
424 TimerHi35xxSetMode(info, TIMERx_CONTROL_TIMERMODE_PERIOD);
425 TimerHi35xxIntEnable(info, false);
426 TimerHi35xxSetPre(info, TIMERx_CONTROL_TIMERPRE_NOT);
427 TimerHi35xxTimerSize(info, true);
428 TimerHi35xxRegRead(info->regBase + HI35XX_TIMERx_CONTROL);
430 TimerHi35xxTimerLoadSet(info, HI35XX_TIMERx_LOAD_INIT_VAL);
434 static int32_t TimerHi35xxReadHcs(struct TimerHi35xxInfo *info, const struct DeviceResourceNode *node)
446 ret = iface->GetUint32(node, "number", &info->number, 0);
452 ret = iface->GetUint32(node, "bus_clock", &info->busClock, 0);
454 HDF_LOGE("%s: read [%u] bus_clock fail!", __func__, info->number);
458 ret = iface->GetUint32(node, "mode", &info->mode, 0);
460 HDF_LOGE("%s: read [%u] mode fail!", __func__, info->number);
464 ret = iface->GetUint32(node, "init_count_val", &info->initCountVal, 0);
466 HDF_LOGE("%s: read [%u] init_count_val fail!", __func__, info->number);
470 ret = iface->GetUint32(node, "irq", &info->irq, 0);
472 HDF_LOGE("%s: read [%u] irq fail!", __func__, info->number);
477 HDF_LOGE("%s: read [%u] reg_base fail", __func__, info->number);
480 info->regBase = OsalIoRemap(tmp, TIMER_MAX_REG_SIZE);
481 if (info->regBase == NULL) {
487 info->number, info->busClock, info->mode, info->initCountVal, info->irq);
492 static int32_t TimerHi35xxInitHandle(const struct DeviceResourceNode *node, struct TimerHi35xxInfo *info)
495 CHECK_NULL_PTR_RETURN_VALUE(info, HDF_ERR_INVALID_OBJECT);
497 int32_t ret = TimerHi35xxReadHcs(info, node);
503 ret = TimerHi35xxInitRegSet(info);
508 info->isIrqReg = false;
526 static void TimerDumperGet(struct TimerHi35xxInfo *info)
534 TIMER_DUMPER_NAME_PREFIX, info->number) < 0) {
545 info->dumperName = name;
546 info->dumper = dumper;
553 struct TimerHi35xxInfo *info = NULL;
559 info = (struct TimerHi35xxInfo *)OsalMemCalloc(sizeof(*info));
561 HDF_LOGE("%s: malloc info fail!", __func__);
565 cntrl->priv = (void *)info;
567 ret = TimerHi35xxInitHandle(node, info);
574 cntrl->info.number = info->number;
576 TimerDumperGet(info);