提交 c1a37f2c 编写于 作者: S Stefan Richter

ieee1394: de-inline some functions

This small reorganization of public csr1212 functions saves one
exported symbol and a few bytes in the driver modules.
Signed-off-by: NStefan Richter <stefanr@s5r6.in-berlin.de>
上级 64ff7123
...@@ -518,7 +518,7 @@ void csr1212_detach_keyval_from_directory(struct csr1212_keyval *dir, ...@@ -518,7 +518,7 @@ void csr1212_detach_keyval_from_directory(struct csr1212_keyval *dir,
* will be destroyed as well if their respective refcnts are 0. By means of * will be destroyed as well if their respective refcnts are 0. By means of
* list manipulation, this routine will descend a directory structure in a * list manipulation, this routine will descend a directory structure in a
* non-recursive manner. */ * non-recursive manner. */
void _csr1212_destroy_keyval(struct csr1212_keyval *kv) static void csr1212_destroy_keyval(struct csr1212_keyval *kv)
{ {
struct csr1212_keyval *k, *a; struct csr1212_keyval *k, *a;
struct csr1212_dentry dentry; struct csr1212_dentry dentry;
...@@ -566,6 +566,14 @@ void _csr1212_destroy_keyval(struct csr1212_keyval *kv) ...@@ -566,6 +566,14 @@ void _csr1212_destroy_keyval(struct csr1212_keyval *kv)
} }
} }
void csr1212_release_keyval(struct csr1212_keyval *kv)
{
if (kv->refcnt > 1)
kv->refcnt--;
else
csr1212_destroy_keyval(kv);
}
void csr1212_destroy_csr(struct csr1212_csr *csr) void csr1212_destroy_csr(struct csr1212_csr *csr)
{ {
struct csr1212_csr_rom_cache *c, *oc; struct csr1212_csr_rom_cache *c, *oc;
...@@ -1251,7 +1259,8 @@ int csr1212_parse_keyval(struct csr1212_keyval *kv, ...@@ -1251,7 +1259,8 @@ int csr1212_parse_keyval(struct csr1212_keyval *kv,
return ret; return ret;
} }
int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv) static int
csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
{ {
struct csr1212_cache_region *cr, *ncr, *newcr = NULL; struct csr1212_cache_region *cr, *ncr, *newcr = NULL;
struct csr1212_keyval_img *kvi = NULL; struct csr1212_keyval_img *kvi = NULL;
...@@ -1412,6 +1421,17 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv) ...@@ -1412,6 +1421,17 @@ int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
return csr1212_parse_keyval(kv, cache); return csr1212_parse_keyval(kv, cache);
} }
struct csr1212_keyval *
csr1212_get_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
{
if (!kv)
return NULL;
if (!kv->valid)
if (csr1212_read_keyval(csr, kv) != CSR1212_SUCCESS)
return NULL;
return kv;
}
int csr1212_parse_csr(struct csr1212_csr *csr) int csr1212_parse_csr(struct csr1212_csr *csr)
{ {
static const int mr_map[] = { 4, 64, 1024, 0 }; static const int mr_map[] = { 4, 64, 1024, 0 };
...@@ -1443,7 +1463,7 @@ int csr1212_parse_csr(struct csr1212_csr *csr) ...@@ -1443,7 +1463,7 @@ int csr1212_parse_csr(struct csr1212_csr *csr)
csr->root_kv->valid = 0; csr->root_kv->valid = 0;
csr->root_kv->next = csr->root_kv; csr->root_kv->next = csr->root_kv;
csr->root_kv->prev = csr->root_kv; csr->root_kv->prev = csr->root_kv;
ret = _csr1212_read_keyval(csr, csr->root_kv); ret = csr1212_read_keyval(csr, csr->root_kv);
if (ret != CSR1212_SUCCESS) if (ret != CSR1212_SUCCESS)
return ret; return ret;
...@@ -1453,7 +1473,7 @@ int csr1212_parse_csr(struct csr1212_csr *csr) ...@@ -1453,7 +1473,7 @@ int csr1212_parse_csr(struct csr1212_csr *csr)
dentry; dentry = dentry->next) { dentry; dentry = dentry->next) {
if (dentry->kv->key.id == CSR1212_KV_ID_EXTENDED_ROM && if (dentry->kv->key.id == CSR1212_KV_ID_EXTENDED_ROM &&
!dentry->kv->valid) { !dentry->kv->valid) {
ret = _csr1212_read_keyval(csr, dentry->kv); ret = csr1212_read_keyval(csr, dentry->kv);
if (ret != CSR1212_SUCCESS) if (ret != CSR1212_SUCCESS)
return ret; return ret;
} }
......
...@@ -313,15 +313,11 @@ extern int csr1212_parse_keyval(struct csr1212_keyval *kv, ...@@ -313,15 +313,11 @@ extern int csr1212_parse_keyval(struct csr1212_keyval *kv,
struct csr1212_csr_rom_cache *cache); struct csr1212_csr_rom_cache *cache);
extern int csr1212_parse_csr(struct csr1212_csr *csr); extern int csr1212_parse_csr(struct csr1212_csr *csr);
/* These are internal functions referenced by inline functions below. */
extern int _csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv);
extern void _csr1212_destroy_keyval(struct csr1212_keyval *kv);
/* This function allocates a new cache which may be used for either parsing or /* This function allocates a new cache which may be used for either parsing or
* generating sub-sets of Configuration ROM images. */ * generating sub-sets of Configuration ROM images. */
static inline struct csr1212_csr_rom_cache *csr1212_rom_cache_malloc(u32 offset, static inline struct csr1212_csr_rom_cache *
size_t size) csr1212_rom_cache_malloc(u32 offset, size_t size)
{ {
struct csr1212_csr_rom_cache *cache; struct csr1212_csr_rom_cache *cache;
...@@ -345,16 +341,8 @@ static inline struct csr1212_csr_rom_cache *csr1212_rom_cache_malloc(u32 offset, ...@@ -345,16 +341,8 @@ static inline struct csr1212_csr_rom_cache *csr1212_rom_cache_malloc(u32 offset,
/* This function ensures that a keyval contains data when referencing a keyval /* This function ensures that a keyval contains data when referencing a keyval
* created by parsing a Configuration ROM. */ * created by parsing a Configuration ROM. */
static inline struct csr1212_keyval *csr1212_get_keyval(struct csr1212_csr *csr, extern struct csr1212_keyval *
struct csr1212_keyval *kv) csr1212_get_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv);
{
if (!kv)
return NULL;
if (!kv->valid)
if (_csr1212_read_keyval(csr, kv) != CSR1212_SUCCESS)
return NULL;
return kv;
}
/* This function increments the reference count for a keyval should there be a /* This function increments the reference count for a keyval should there be a
...@@ -369,13 +357,7 @@ static inline void csr1212_keep_keyval(struct csr1212_keyval *kv) ...@@ -369,13 +357,7 @@ static inline void csr1212_keep_keyval(struct csr1212_keyval *kv)
* keyval when there are no more users of the keyval. This should be called by * keyval when there are no more users of the keyval. This should be called by
* any code that calls csr1212_keep_keyval() or any of the keyval creation * any code that calls csr1212_keep_keyval() or any of the keyval creation
* routines csr1212_new_*(). */ * routines csr1212_new_*(). */
static inline void csr1212_release_keyval(struct csr1212_keyval *kv) extern void csr1212_release_keyval(struct csr1212_keyval *kv);
{
if (kv->refcnt > 1)
kv->refcnt--;
else
_csr1212_destroy_keyval(kv);
}
/* /*
......
...@@ -1372,11 +1372,10 @@ EXPORT_SYMBOL(hpsb_iso_wake); ...@@ -1372,11 +1372,10 @@ EXPORT_SYMBOL(hpsb_iso_wake);
EXPORT_SYMBOL(hpsb_iso_recv_flush); EXPORT_SYMBOL(hpsb_iso_recv_flush);
/** csr1212.c **/ /** csr1212.c **/
EXPORT_SYMBOL(csr1212_new_directory);
EXPORT_SYMBOL(csr1212_attach_keyval_to_directory); EXPORT_SYMBOL(csr1212_attach_keyval_to_directory);
EXPORT_SYMBOL(csr1212_detach_keyval_from_directory); EXPORT_SYMBOL(csr1212_detach_keyval_from_directory);
EXPORT_SYMBOL(csr1212_release_keyval); EXPORT_SYMBOL(csr1212_get_keyval);
EXPORT_SYMBOL(csr1212_read); EXPORT_SYMBOL(csr1212_new_directory);
EXPORT_SYMBOL(csr1212_parse_keyval); EXPORT_SYMBOL(csr1212_parse_keyval);
EXPORT_SYMBOL(_csr1212_read_keyval); EXPORT_SYMBOL(csr1212_read);
EXPORT_SYMBOL(_csr1212_destroy_keyval); EXPORT_SYMBOL(csr1212_release_keyval);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册