summaryrefslogtreecommitdiffstats
path: root/drivers/net/shaper.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1998-08-25 09:12:35 +0000
committerRalf Baechle <ralf@linux-mips.org>1998-08-25 09:12:35 +0000
commitc7fc24dc4420057f103afe8fc64524ebc25c5d37 (patch)
tree3682407a599b8f9f03fc096298134cafba1c9b2f /drivers/net/shaper.c
parent1d793fade8b063fde3cf275bf1a5c2d381292cd9 (diff)
o Merge with Linux 2.1.116.
o New Newport console code. o New G364 console code.
Diffstat (limited to 'drivers/net/shaper.c')
-rw-r--r--drivers/net/shaper.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/drivers/net/shaper.c b/drivers/net/shaper.c
index e536318a1..9879f3de0 100644
--- a/drivers/net/shaper.c
+++ b/drivers/net/shaper.c
@@ -128,6 +128,7 @@ static int shaper_clocks(struct shaper *shaper, struct sk_buff *skb)
static void shaper_setspeed(struct shaper *shaper, int bitspersec)
{
+ shaper->bitspersec=bitspersec;
shaper->bytespertick=(bitspersec/HZ)/8;
if(!shaper->bytespertick)
shaper->bytespertick++;
@@ -326,7 +327,8 @@ static void shaper_kick(struct shaper *shaper)
*/
skb_unlink(skb);
- shaper->recovery=jiffies+skb->shapelen;
+ if (shaper->recovery < skb->shapeclock + skb->shapelen)
+ shaper->recovery = skb->shapeclock + skb->shapelen;
restore_flags(flags);
/*
@@ -548,18 +550,28 @@ static int shaper_ioctl(struct device *dev, struct ifreq *ifr, int cmd)
{
struct shaperconf *ss= (struct shaperconf *)&ifr->ifr_data;
struct shaper *sh=dev->priv;
- struct device *them=dev_get(ss->ss_name);
switch(ss->ss_cmd)
{
case SHAPER_SET_DEV:
+ {
+ struct device *them=dev_get(ss->ss_name);
if(them==NULL)
return -ENODEV;
if(sh->dev)
return -EBUSY;
return shaper_attach(dev,dev->priv, them);
+ }
+ case SHAPER_GET_DEV:
+ if(sh->dev==NULL)
+ return -ENODEV;
+ memcpy(ss->ss_name, sh->dev->name, sizeof(ss->ss_name));
+ return 0;
case SHAPER_SET_SPEED:
shaper_setspeed(sh,ss->ss_speed);
return 0;
+ case SHAPER_GET_SPEED:
+ ss->ss_speed=sh->bitspersec;
+ return 0;
default:
return -EINVAL;
}