diff options
| -rw-r--r-- | sound/core/info.c | 56 | ||||
| -rw-r--r-- | sound/drivers/opl4/opl4_proc.c | 24 | ||||
| -rw-r--r-- | sound/isa/gus/gus_mem_proc.c | 26 | ||||
| -rw-r--r-- | sound/pci/mixart/mixart.c | 51 |
4 files changed, 30 insertions, 127 deletions
diff --git a/sound/core/info.c b/sound/core/info.c index f90a6fd43fb4..b70564ed8b37 100644 --- a/sound/core/info.c +++ b/sound/core/info.c | |||
| @@ -164,39 +164,43 @@ static loff_t snd_info_entry_llseek(struct file *file, loff_t offset, int orig) | |||
| 164 | { | 164 | { |
| 165 | struct snd_info_private_data *data; | 165 | struct snd_info_private_data *data; |
| 166 | struct snd_info_entry *entry; | 166 | struct snd_info_entry *entry; |
| 167 | loff_t ret; | 167 | loff_t ret = -EINVAL, size; |
| 168 | 168 | ||
| 169 | data = file->private_data; | 169 | data = file->private_data; |
| 170 | entry = data->entry; | 170 | entry = data->entry; |
| 171 | mutex_lock(&entry->access); | 171 | mutex_lock(&entry->access); |
| 172 | switch (entry->content) { | 172 | if (entry->content == SNDRV_INFO_CONTENT_DATA && |
| 173 | case SNDRV_INFO_CONTENT_TEXT: | 173 | entry->c.ops->llseek) { |
| 174 | switch (orig) { | 174 | offset = entry->c.ops->llseek(entry, |
| 175 | case SEEK_SET: | 175 | data->file_private_data, |
| 176 | file->f_pos = offset; | 176 | file, offset, orig); |
| 177 | ret = file->f_pos; | 177 | goto out; |
| 178 | goto out; | 178 | } |
| 179 | case SEEK_CUR: | 179 | if (entry->content == SNDRV_INFO_CONTENT_DATA) |
| 180 | file->f_pos += offset; | 180 | size = entry->size; |
| 181 | ret = file->f_pos; | 181 | else |
| 182 | goto out; | 182 | size = 0; |
| 183 | case SEEK_END: | 183 | switch (orig) { |
| 184 | default: | 184 | case SEEK_SET: |
| 185 | ret = -EINVAL; | ||
| 186 | goto out; | ||
| 187 | } | ||
| 188 | break; | 185 | break; |
| 189 | case SNDRV_INFO_CONTENT_DATA: | 186 | case SEEK_CUR: |
| 190 | if (entry->c.ops->llseek) { | 187 | offset += file->f_pos; |
| 191 | ret = entry->c.ops->llseek(entry, | 188 | break; |
| 192 | data->file_private_data, | 189 | case SEEK_END: |
| 193 | file, offset, orig); | 190 | if (!size) |
| 194 | goto out; | 191 | goto out; |
| 195 | } | 192 | offset += size; |
| 196 | break; | 193 | break; |
| 197 | } | 194 | default: |
| 198 | ret = -ENXIO; | 195 | goto out; |
| 199 | out: | 196 | } |
| 197 | if (offset < 0) | ||
| 198 | goto out; | ||
| 199 | if (size && offset > size) | ||
| 200 | offset = size; | ||
| 201 | file->f_pos = offset; | ||
| 202 | ret = offset; | ||
| 203 | out: | ||
| 200 | mutex_unlock(&entry->access); | 204 | mutex_unlock(&entry->access); |
| 201 | return ret; | 205 | return ret; |
| 202 | } | 206 | } |
diff --git a/sound/drivers/opl4/opl4_proc.c b/sound/drivers/opl4/opl4_proc.c index 210b89de06d7..c5c13c4c260e 100644 --- a/sound/drivers/opl4/opl4_proc.c +++ b/sound/drivers/opl4/opl4_proc.c | |||
| @@ -90,35 +90,11 @@ static ssize_t snd_opl4_mem_proc_write(struct snd_info_entry *entry, | |||
| 90 | return count; | 90 | return count; |
| 91 | } | 91 | } |
| 92 | 92 | ||
| 93 | static loff_t snd_opl4_mem_proc_llseek(struct snd_info_entry *entry, | ||
| 94 | void *file_private_data, | ||
| 95 | struct file *file, | ||
| 96 | loff_t offset, int orig) | ||
| 97 | { | ||
| 98 | switch (orig) { | ||
| 99 | case SEEK_SET: | ||
| 100 | file->f_pos = offset; | ||
| 101 | break; | ||
| 102 | case SEEK_CUR: | ||
| 103 | file->f_pos += offset; | ||
| 104 | break; | ||
| 105 | case SEEK_END: /* offset is negative */ | ||
| 106 | file->f_pos = entry->size + offset; | ||
| 107 | break; | ||
| 108 | default: | ||
| 109 | return -EINVAL; | ||
| 110 | } | ||
| 111 | if (file->f_pos > entry->size) | ||
| 112 | file->f_pos = entry->size; | ||
| 113 | return file->f_pos; | ||
| 114 | } | ||
| 115 | |||
| 116 | static struct snd_info_entry_ops snd_opl4_mem_proc_ops = { | 93 | static struct snd_info_entry_ops snd_opl4_mem_proc_ops = { |
| 117 | .open = snd_opl4_mem_proc_open, | 94 | .open = snd_opl4_mem_proc_open, |
| 118 | .release = snd_opl4_mem_proc_release, | 95 | .release = snd_opl4_mem_proc_release, |
| 119 | .read = snd_opl4_mem_proc_read, | 96 | .read = snd_opl4_mem_proc_read, |
| 120 | .write = snd_opl4_mem_proc_write, | 97 | .write = snd_opl4_mem_proc_write, |
| 121 | .llseek = snd_opl4_mem_proc_llseek, | ||
| 122 | }; | 98 | }; |
| 123 | 99 | ||
| 124 | int snd_opl4_create_proc(struct snd_opl4 *opl4) | 100 | int snd_opl4_create_proc(struct snd_opl4 *opl4) |
diff --git a/sound/isa/gus/gus_mem_proc.c b/sound/isa/gus/gus_mem_proc.c index faa2bec8f6b6..2ccb3fadd7be 100644 --- a/sound/isa/gus/gus_mem_proc.c +++ b/sound/isa/gus/gus_mem_proc.c | |||
| @@ -46,31 +46,6 @@ static ssize_t snd_gf1_mem_proc_dump(struct snd_info_entry *entry, | |||
| 46 | return count; | 46 | return count; |
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | static loff_t snd_gf1_mem_proc_llseek(struct snd_info_entry *entry, | ||
| 50 | void *private_file_data, | ||
| 51 | struct file *file, | ||
| 52 | loff_t offset, int orig) | ||
| 53 | { | ||
| 54 | struct gus_proc_private *priv = entry->private_data; | ||
| 55 | |||
| 56 | switch (orig) { | ||
| 57 | case SEEK_SET: | ||
| 58 | file->f_pos = offset; | ||
| 59 | break; | ||
| 60 | case SEEK_CUR: | ||
| 61 | file->f_pos += offset; | ||
| 62 | break; | ||
| 63 | case SEEK_END: /* offset is negative */ | ||
| 64 | file->f_pos = priv->size + offset; | ||
| 65 | break; | ||
| 66 | default: | ||
| 67 | return -EINVAL; | ||
| 68 | } | ||
| 69 | if (file->f_pos > priv->size) | ||
| 70 | file->f_pos = priv->size; | ||
| 71 | return file->f_pos; | ||
| 72 | } | ||
| 73 | |||
| 74 | static void snd_gf1_mem_proc_free(struct snd_info_entry *entry) | 49 | static void snd_gf1_mem_proc_free(struct snd_info_entry *entry) |
| 75 | { | 50 | { |
| 76 | struct gus_proc_private *priv = entry->private_data; | 51 | struct gus_proc_private *priv = entry->private_data; |
| @@ -79,7 +54,6 @@ static void snd_gf1_mem_proc_free(struct snd_info_entry *entry) | |||
| 79 | 54 | ||
| 80 | static struct snd_info_entry_ops snd_gf1_mem_proc_ops = { | 55 | static struct snd_info_entry_ops snd_gf1_mem_proc_ops = { |
| 81 | .read = snd_gf1_mem_proc_dump, | 56 | .read = snd_gf1_mem_proc_dump, |
| 82 | .llseek = snd_gf1_mem_proc_llseek, | ||
| 83 | }; | 57 | }; |
| 84 | 58 | ||
| 85 | int snd_gf1_mem_proc_init(struct snd_gus_card * gus) | 59 | int snd_gf1_mem_proc_init(struct snd_gus_card * gus) |
diff --git a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c index be95e005c81d..6c3fd4d1c49d 100644 --- a/sound/pci/mixart/mixart.c +++ b/sound/pci/mixart/mixart.c | |||
| @@ -1102,55 +1102,6 @@ static int snd_mixart_free(struct mixart_mgr *mgr) | |||
| 1102 | /* | 1102 | /* |
| 1103 | * proc interface | 1103 | * proc interface |
| 1104 | */ | 1104 | */ |
| 1105 | static loff_t snd_mixart_BA0_llseek(struct snd_info_entry *entry, | ||
| 1106 | void *private_file_data, | ||
| 1107 | struct file *file, | ||
| 1108 | loff_t offset, int orig) | ||
| 1109 | { | ||
| 1110 | offset = offset & ~3; /* 4 bytes aligned */ | ||
| 1111 | |||
| 1112 | switch(orig) { | ||
| 1113 | case SEEK_SET: | ||
| 1114 | file->f_pos = offset; | ||
| 1115 | break; | ||
| 1116 | case SEEK_CUR: | ||
| 1117 | file->f_pos += offset; | ||
| 1118 | break; | ||
| 1119 | case SEEK_END: /* offset is negative */ | ||
| 1120 | file->f_pos = MIXART_BA0_SIZE + offset; | ||
| 1121 | break; | ||
| 1122 | default: | ||
| 1123 | return -EINVAL; | ||
| 1124 | } | ||
| 1125 | if(file->f_pos > MIXART_BA0_SIZE) | ||
| 1126 | file->f_pos = MIXART_BA0_SIZE; | ||
| 1127 | return file->f_pos; | ||
| 1128 | } | ||
| 1129 | |||
| 1130 | static loff_t snd_mixart_BA1_llseek(struct snd_info_entry *entry, | ||
| 1131 | void *private_file_data, | ||
| 1132 | struct file *file, | ||
| 1133 | loff_t offset, int orig) | ||
| 1134 | { | ||
| 1135 | offset = offset & ~3; /* 4 bytes aligned */ | ||
| 1136 | |||
| 1137 | switch(orig) { | ||
| 1138 | case SEEK_SET: | ||
| 1139 | file->f_pos = offset; | ||
| 1140 | break; | ||
| 1141 | case SEEK_CUR: | ||
| 1142 | file->f_pos += offset; | ||
| 1143 | break; | ||
| 1144 | case SEEK_END: /* offset is negative */ | ||
| 1145 | file->f_pos = MIXART_BA1_SIZE + offset; | ||
| 1146 | break; | ||
| 1147 | default: | ||
| 1148 | return -EINVAL; | ||
| 1149 | } | ||
| 1150 | if(file->f_pos > MIXART_BA1_SIZE) | ||
| 1151 | file->f_pos = MIXART_BA1_SIZE; | ||
| 1152 | return file->f_pos; | ||
| 1153 | } | ||
| 1154 | 1105 | ||
| 1155 | /* | 1106 | /* |
| 1156 | mixart_BA0 proc interface for BAR 0 - read callback | 1107 | mixart_BA0 proc interface for BAR 0 - read callback |
| @@ -1186,12 +1137,10 @@ static ssize_t snd_mixart_BA1_read(struct snd_info_entry *entry, | |||
| 1186 | 1137 | ||
| 1187 | static struct snd_info_entry_ops snd_mixart_proc_ops_BA0 = { | 1138 | static struct snd_info_entry_ops snd_mixart_proc_ops_BA0 = { |
| 1188 | .read = snd_mixart_BA0_read, | 1139 | .read = snd_mixart_BA0_read, |
| 1189 | .llseek = snd_mixart_BA0_llseek | ||
| 1190 | }; | 1140 | }; |
| 1191 | 1141 | ||
| 1192 | static struct snd_info_entry_ops snd_mixart_proc_ops_BA1 = { | 1142 | static struct snd_info_entry_ops snd_mixart_proc_ops_BA1 = { |
| 1193 | .read = snd_mixart_BA1_read, | 1143 | .read = snd_mixart_BA1_read, |
| 1194 | .llseek = snd_mixart_BA1_llseek | ||
| 1195 | }; | 1144 | }; |
| 1196 | 1145 | ||
| 1197 | 1146 | ||
