Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/extres/clk/clk.c
Show All 12 Lines | |||||
#ifdef FDT | #ifdef FDT | ||||
#include <dev/fdt/fdt_common.h> | #include <dev/fdt/fdt_common.h> | ||||
#include <dev/ofw/ofw_bus.h> | #include <dev/ofw/ofw_bus.h> | ||||
#include <dev/ofw/ofw_bus_subr.h> | #include <dev/ofw/ofw_bus_subr.h> | ||||
#endif | #endif | ||||
#include <dev/extres/clk/clk.h> | #include <dev/extres/clk/clk.h> | ||||
SYSCTL_NODE(_hw, OID_AUTO, clock, CTLFLAG_RD, NULL, "Clocks"); | SYSCTL_NODE(_hw, OID_AUTO, clock, CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, | ||||
"Clocks"); | |||||
MALLOC_DEFINE(M_CLOCK, "clocks", "Clock framework"); | MALLOC_DEFINE(M_CLOCK, "clocks", "Clock framework"); | ||||
/* Forward declarations. */ | /* Forward declarations. */ | ||||
struct clk; | struct clk; | ||||
struct clknodenode; | struct clknodenode; | ||||
struct clkdom; | struct clkdom; | ||||
Show All 24 Lines | |||||
clkdom = malloc(sizeof(struct clkdom), M_CLOCK, M_WAITOK | M_ZERO); | clkdom = malloc(sizeof(struct clkdom), M_CLOCK, M_WAITOK | M_ZERO); | ||||
clkdom->dev = dev; | clkdom->dev = dev; | ||||
TAILQ_INIT(&clkdom->clknode_list); | TAILQ_INIT(&clkdom->clknode_list); | ||||
#ifdef FDT | #ifdef FDT | ||||
clkdom->ofw_mapper = clknode_default_ofw_map; | clkdom->ofw_mapper = clknode_default_ofw_map; | ||||
#endif | #endif | ||||
SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), | SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), | SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), | ||||
OID_AUTO, "clocks", | OID_AUTO, "clocks", | ||||
CTLTYPE_STRING | CTLFLAG_RD, | CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | ||||
clkdom, 0, clkdom_sysctl, | clkdom, 0, clkdom_sysctl, "A", | ||||
"A", | "Clock list for the domain"); | ||||
"Clock list for the domain"); | |||||
return (clkdom); | return (clkdom); | ||||
} | } | ||||
void | void | ||||
clkdom_unlock(struct clkdom *clkdom) | clkdom_unlock(struct clkdom *clkdom) | ||||
{ | { | ||||
Show All 24 Lines | |||||
if (replaced) | if (replaced) | ||||
return (clknode); | return (clknode); | ||||
sysctl_ctx_init(&clknode->sysctl_ctx); | sysctl_ctx_init(&clknode->sysctl_ctx); | ||||
clknode_oid = SYSCTL_ADD_NODE(&clknode->sysctl_ctx, | clknode_oid = SYSCTL_ADD_NODE(&clknode->sysctl_ctx, | ||||
SYSCTL_STATIC_CHILDREN(_hw_clock), | SYSCTL_STATIC_CHILDREN(_hw_clock), | ||||
OID_AUTO, clknode->name, | OID_AUTO, clknode->name, | ||||
CTLFLAG_RD, 0, "A clock node"); | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, | ||||
"A clock node"); | |||||
SYSCTL_ADD_U64(&clknode->sysctl_ctx, | SYSCTL_ADD_U64(&clknode->sysctl_ctx, | ||||
SYSCTL_CHILDREN(clknode_oid), | SYSCTL_CHILDREN(clknode_oid), | ||||
OID_AUTO, "frequency", | OID_AUTO, "frequency", | ||||
CTLFLAG_RD, &clknode->freq, 0, "The clock frequency"); | CTLFLAG_RD, &clknode->freq, 0, "The clock frequency"); | ||||
SYSCTL_ADD_PROC(&clknode->sysctl_ctx, | SYSCTL_ADD_PROC(&clknode->sysctl_ctx, | ||||
SYSCTL_CHILDREN(clknode_oid), | SYSCTL_CHILDREN(clknode_oid), | ||||
OID_AUTO, "parent", | OID_AUTO, "parent", | ||||
CTLTYPE_STRING | CTLFLAG_RD, | CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | ||||
clknode, CLKNODE_SYSCTL_PARENT, clknode_sysctl, | clknode, CLKNODE_SYSCTL_PARENT, clknode_sysctl, "A", | ||||
"A", | |||||
"The clock parent"); | "The clock parent"); | ||||
SYSCTL_ADD_PROC(&clknode->sysctl_ctx, | SYSCTL_ADD_PROC(&clknode->sysctl_ctx, | ||||
SYSCTL_CHILDREN(clknode_oid), | SYSCTL_CHILDREN(clknode_oid), | ||||
OID_AUTO, "parents", | OID_AUTO, "parents", | ||||
CTLTYPE_STRING | CTLFLAG_RD, | CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | ||||
clknode, CLKNODE_SYSCTL_PARENTS_LIST, clknode_sysctl, | clknode, CLKNODE_SYSCTL_PARENTS_LIST, clknode_sysctl, "A", | ||||
"A", | |||||
"The clock parents list"); | "The clock parents list"); | ||||
SYSCTL_ADD_PROC(&clknode->sysctl_ctx, | SYSCTL_ADD_PROC(&clknode->sysctl_ctx, | ||||
SYSCTL_CHILDREN(clknode_oid), | SYSCTL_CHILDREN(clknode_oid), | ||||
OID_AUTO, "childrens", | OID_AUTO, "childrens", | ||||
CTLTYPE_STRING | CTLFLAG_RD, | CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_NEEDGIANT, | ||||
clknode, CLKNODE_SYSCTL_CHILDREN_LIST, clknode_sysctl, | clknode, CLKNODE_SYSCTL_CHILDREN_LIST, clknode_sysctl, "A", | ||||
"A", | |||||
"The clock childrens list"); | "The clock childrens list"); | ||||
SYSCTL_ADD_INT(&clknode->sysctl_ctx, | SYSCTL_ADD_INT(&clknode->sysctl_ctx, | ||||
SYSCTL_CHILDREN(clknode_oid), | SYSCTL_CHILDREN(clknode_oid), | ||||
OID_AUTO, "enable_cnt", | OID_AUTO, "enable_cnt", | ||||
CTLFLAG_RD, &clknode->enable_cnt, 0, "The clock enable counter"); | CTLFLAG_RD, &clknode->enable_cnt, 0, "The clock enable counter"); | ||||
return (clknode); | return (clknode); | ||||
} | } | ||||
Show All 12 Lines |